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

Wie entferne ich während der Iteration in C sicher Elemente aus einem Vektor?

Barbara Streisand
Freigeben: 2024-12-04 04:09:13
Original
176 Leute haben es durchsucht

How to Safely Remove Elements from a Vector During Iteration in C  ?

Elemente aus einem Vektor innerhalb einer Schleife entfernen

Beim Durchlaufen eines Vektors kann es Szenarien geben, in denen Sie Elemente basierend auf entfernen müssen bestimmte Kriterien. Der Versuch, den Vektor während der Iteration zu ändern, kann jedoch zu Laufzeitfehlern führen.

Stellen Sie sich das folgende Szenario vor:

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++) {
  if (it->getpMoney() <= 0)
    it = allPlayers.erase(it);
  else
    ++it;
}
Nach dem Login kopieren

Mit diesem Code sollen Spieler mit null oder negativem Geld entfernt werden. Es schlägt jedoch mit einem Fehler im Zusammenhang mit dem Zuweisungsoperator fehl. Um dieses Problem zu beheben, vermeiden Sie es, den Iterator innerhalb der Schleife zu erhöhen. Verlassen Sie sich stattdessen auf den Iterator, der von der Funktion erase() zurückgegeben wird.

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); /*it++*/) {
  if (it->getpMoney() <= 0)
    it = allPlayers.erase(it);
  else
    ++it;
}
Nach dem Login kopieren

Darüber hinaus erfordert die Verwendung von „operator=“ durch die Funktion erase(), dass die Player-Klasse zuweisbar ist, was bedeutet, dass die Player-Klasse implementiert werden muss ein Zuweisungsoperator.

Erase-Remove Idiom für Vektormanipulation

Um die Aufgabe des Entfernens zu vereinfachen Elemente aus einem Vektor umfassen das Erase-Remove-Idiom:

allPlayers.erase(
  std::remove_if(
    allPlayers.begin(),
    allPlayers.end(),
    [](Player const &amp; p) { return p.getpMoney() <= 0; }
  ),
  allPlayers.end()
);
Nach dem Login kopieren

Dieses Idiom kombiniert den Algorithmus „remove_if()“ zum Identifizieren der zu löschenden Elemente und die Methode „erase()“ zum Entfernen des erforderlichen Bereichs.

Das obige ist der detaillierte Inhalt vonWie entferne ich während der Iteration in C sicher Elemente aus einem 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