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.
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; } }
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 } }
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!