Heim > Backend-Entwicklung > C++ > Wie lösche ich während der Iteration sicher Elemente aus einem C-Vektor?

Wie lösche ich während der Iteration sicher Elemente aus einem C-Vektor?

Mary-Kate Olsen
Freigeben: 2024-12-05 04:31:09
Original
415 Leute haben es durchsucht

How to Safely Erase Elements from a C   Vector While Iterating?

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;
    }
}
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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;
  }
}
Nach dem Login kopieren

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!

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