Sichere Karteniteration mit Elemententfernung
Bei der Arbeit mit Karten kann es sein, dass Sie Elemente entfernen müssen, während Sie darüber iterieren. Die Verwendung der erase()-Methode der Karte direkt in einer Schleife kann jedoch dazu führen, dass Iteratoren ungültig werden. Um dieses Problem zu vermeiden, verwenden Sie die folgende Redewendung:
for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */) { if (must_delete) { m.erase(it++); // or "it = m.erase(it)" since C++11 } else { ++it; } }
Diese Redewendung verwendet eine nicht bereichsbasierte for-Schleife, um den Container direkt zu ändern. Indem wir den Iterator innerhalb der Schleife nur dann erhöhen, wenn das Element nicht entfernt werden soll, bewahren wir die Integrität der Iteration.
Beachten Sie, dass das Löschen von Const-Iteratoren vor C 11 eine etwas andere Syntax erforderte:
for (std::map<K,V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
Denken Sie daran, dass das Entfernen von Elementen nicht gegen die Konstanz verstößt, da const-Elemente weiterhin nicht mehr existieren können.
Das obige ist der detaillierte Inhalt vonWie kann ich beim Iterieren in C sicher Elemente aus einer Karte entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!