Elemente aus einer Karte während der Iteration entfernen
In C kann das Iterieren über eine Standardbibliothekskarte beim Entfernen von Elementen eine Herausforderung sein, da das Löschen verwendet wird () macht Iteratoren ungültig. Es gibt jedoch eine weithin akzeptierte Redewendung, um dieses Problem anzugehen:
for(auto it = m.begin(); it != m.cend() /* not hoisted */; /* no increment */) { if(must_delete) { auto next = it; it = m.erase(it); // or "it = m.erase(it)" since C++11 } else { ++it; } }
So funktioniert diese Redewendung:
Syntax vor C 11:
Vor C 11 erforderte das Löschen von Const-Iteratoren einen geringfügigen Zeitaufwand andere Syntax:
for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
Konstanz und Entfernung:
Das Löschen eines Elements aus einer Karte verletzt nicht die Konstanz der Elemente, ähnlich wie das Löschen eines Zeigers auf eine Konstante. Konstanz schränkt in erster Linie die Möglichkeit ein, den Wert zu ändern, nicht seine Lebensdauer.
Das obige ist der detaillierte Inhalt vonWie kann ich während der Iteration sicher Elemente aus einer C-Map entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!