Heim > Backend-Entwicklung > C++ > Was passiert, wenn Sie ein Kartenelement während der Iteration in C löschen?

Was passiert, wenn Sie ein Kartenelement während der Iteration in C löschen?

Linda Hamilton
Freigeben: 2024-12-15 16:02:11
Original
994 Leute haben es durchsucht

What Happens When You Erase a Map Element During Iteration in C  ?

Was passiert, wenn Sie erase() für ein Kartenelement aufrufen, während Sie von Anfang bis Ende iterieren?

Beim Iterieren durch a Wenn Sie eine Karte in C erstellen, ist es wichtig, das Verhalten beim Löschen von Elementen während der Iteration zu berücksichtigen. Dieser Vorgang kann zu unerwarteten Ergebnissen führen, wenn er nicht korrekt ausgeführt wird.

C 11

In C 11 wurde die Methode erase() verbessert und ist jetzt konsistent über alle Containertypen hinweg. Wenn ein Element gelöscht wird, gibt die Methode erase() den nächsten Iterator zurück. Dadurch können Sie die Karte ohne Probleme weiter iterieren.

Der folgende Code zeigt die korrekte Methode zum Löschen von Elementen aus einer Karte während der Iteration in C 11:

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

In C 03 das Löschen von Elementen aus einer Karte während der Iteration kann zu ungültigen Iteratoren führen. Um dieses Problem zu vermeiden, sollten Sie die Karte mit einer Schleifenvariablen durchlaufen, die außerhalb der erase()-Operation inkrementiert wird.

Der folgende Code zeigt die korrekte Methode zum Löschen von Elementen aus einer Karte während der Iteration in C 03 :

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.
        // Increments the iterator but returns the
        // original value for use by erase
    } else {
        ++pm_it; // Can use pre-increment in this case
        // To make sure you have the efficient version
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWas passiert, wenn Sie ein Kartenelement während der Iteration in C löschen?. 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