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
Freigeben: 2024-12-15 06:52:13
Original
621 Leute haben es durchsucht

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;
    }
}
Nach dem Login kopieren

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;
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage