Heim >Backend-Entwicklung >C++ >Welche Auswirkungen hat das Entfernen von Kartenelementen während der Iteration in C?

Welche Auswirkungen hat das Entfernen von Kartenelementen während der Iteration in C?

Susan Sarandon
Susan SarandonOriginal
2024-12-15 06:52:13624Durchsuche

What are the Implications of Removing Map Elements While Iterating in C  ?

Konsequenzen des Löschens eines Kartenelements während der Iteration in C

In C kann das Durchlaufen einer Karte und das Löschen von Elementen Bedenken aufwerfen bezüglich der Iteratorvalidität. Das Verhalten variiert je nach verwendeter C-Version.

C 11 und höher

In C 11 wurde die erase()-Methode erweitert, um den Iterator zurückzugeben zum nachfolgenden Element. Dies vereinfacht den Prozess:

auto pm_it = port_map.begin();
while(pm_it != port_map.end()) {
    if (pm_it->second == delete_this_id) {
        pm_it = port_map.erase(pm_it);
    } else {
        ++pm_it;
    }
}

C 03

In C 03 führt das Löschen von Elementen aus einer Karte nicht automatisch dazu, dass Iteratoren ungültig werden. Der Iterator, der auf das gelöschte Element zeigt, wird jedoch ungültig. Um die Gültigkeit des Iterators aufrechtzuerhalten, muss der Code aktualisiert werden:

map<string, SerialdMsg::SerialFunction_t>::iterator pm_it = port_map.begin();
while(pm_it != port_map.end()) {
    if (pm_it->second == delete_this_id) {
        port_map.erase(pm_it++); // Use iterator. Note the post increment
    } else {
        ++pm_it;
    }
}

Hier wird der Post-Inkrement-Operator ( ) im erase()-Aufruf verwendet, um sicherzustellen, dass der zurückgegebene Iterator auf das richtige Element zeigt.

Das obige ist der detaillierte Inhalt vonWelche Auswirkungen hat das Entfernen von Kartenelementen während der Iteration in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn