Heim > Backend-Entwicklung > C++ > Wie entferne ich Elemente während der Iteration sicher aus einer „std::list'?

Wie entferne ich Elemente während der Iteration sicher aus einer „std::list'?

Linda Hamilton
Freigeben: 2024-12-20 13:01:21
Original
446 Leute haben es durchsucht

How to Safely Remove Elements from an `std::list` While Iterating?

Können Sie Elemente aus einer std::list entfernen, während Sie sie durchlaufen?

In C ist die integrierte Klasse std::list eine doppelt verknüpfte Liste, die das effiziente Einfügen und Entfernen von Elementen ermöglicht. Wenn Sie jedoch versuchen, eine Liste während der Iteration zu ändern, ist es wichtig, den Vorgang mit Vorsicht anzugehen.

Problem: Bei der iterativen Überprüfung des Aktivitätsstatus von Elementen im Standard ist ein Fehler aufgetreten:: Liste und versuchen, inaktive Elemente sofort zu entfernen. Beim Versuch, den Iterator nach dem Entfernen eines Elements zu verschieben, ist der Fehler „Listen-Iterator nicht inkrementierbar“ aufgetreten.

Lösung: Der Schlüssel zum erfolgreichen Entfernen von Elementen während der Iteration liegt in der Anwendung der Änderungen am Iterator zunächst, bevor Sie die Entfernung durchführen. Anstatt zu versuchen, den Iterator zu erhöhen und dann das Element zu entfernen, ist es sinnvoller, die Schleife als While-Schleife umzustrukturieren, sodass der Iterator innerhalb der Schleife selbst erhöht werden kann. Daher zeigt der aktualisierte Code unten den richtigen Ansatz:

std::list<item*>::iterator i = items.begin();
while (i != items.end()) {
    bool isActive = (*i)->update();
    if (!isActive) {
        i = items.erase(i);  // alternatively, i = items.erase(i++);
    } else {
        other_code_involving(*i);
        ++i;
    }
}
Nach dem Login kopieren

Dieser überarbeitete Code stellt sicher, dass der Iterator korrekt inkrementiert wird, bevor die Elemententfernung ausgeführt wird. Dadurch wird der Fehler vermieden und eine effiziente Entfernung inaktiver Elemente während der Iteration ermöglicht die Liste.

Das obige ist der detaillierte Inhalt vonWie entferne ich Elemente während der Iteration sicher aus einer „std::list'?. 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