Vektorausrottung mit löschenden Iteratoren
Bei der Programmierung ist das effiziente Durchlaufen und Bearbeiten von Datenstrukturen von entscheidender Bedeutung. Vektoren, ein beliebter dynamischer Container in C, bieten Flexibilität und Wachstumsmöglichkeiten. Das Löschen von Elementen während der Iteration kann jedoch zu unerwarteten Ergebnissen führen.
Betrachten Sie dieses Beispiel:
int main() { vector<int> res; res.push_back(1); vector<int>::iterator it = res.begin(); for( ; it != res.end(); it++) { it = res.erase(it); //if(it == res.end()) // return 0; } }
Der obige Code zielt darauf ab, alle Elemente aus dem Vektor „res“ zu löschen, während Sie ihn durchlaufen . Beim Löschen des letzten Elements tritt jedoch ein Fehler auf. Dies liegt daran, dass der von „res.erase(it)“ zurückgegebene Iterator auf das nächste gültige Element zeigt, das in diesem Fall „res.end()“ wäre.
Um dieses Problem zu beheben, kann man Folgendes verwenden: eine while-Schleife ohne die bedingte Anweisung, etwa:
while (it != res.end()) { it = res.erase(it); }
Dadurch wird sichergestellt, dass die Schleife fortgesetzt wird, bis alle Elemente gelöscht wurden.
Alternativ, wenn Sie Wenn Sie nur bestimmte Elemente basierend auf einer bestimmten Bedingung löschen müssen, können Sie den folgenden Ansatz verwenden:
for ( ; it != res.end(); ) { if (condition) { it = res.erase(it); } else { ++it; } }
Denken Sie daran: Wenn Sie Iteratoren für die Vektormanipulation verwenden, ist es wichtig zu verstehen, wie „res.erase(it)“ funktioniert und die Schleife entsprechend anzupassen, um unerwartetes Verhalten zu verhindern.
Das obige ist der detaillierte Inhalt vonWie lösche ich während der Iteration sicher Elemente aus einem C-Vektor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!