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
Mary-Kate OlsenOriginal
2024-12-05 04:31:09420Durchsuche

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

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!

Stellungnahme:
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