Heim > Backend-Entwicklung > C++ > Wie lösche ich Elemente während der Iteration sicher aus einer std::list?

Wie lösche ich Elemente während der Iteration sicher aus einer std::list?

Barbara Streisand
Freigeben: 2024-12-21 04:25:11
Original
419 Leute haben es durchsucht

How to Safely Delete Elements from a std::list During Iteration?

Elemente während der Iteration in einer std::list löschen

Beim Durchlaufen einer std::list kann das Entfernen von Elementen unter Beibehaltung eines gültigen Iterators eine Herausforderung sein. Betrachten Sie den folgenden Code:

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

Das Hinzufügen der auskommentierten Zeilen zum sofortigen Entfernen inaktiver Elemente würde zu einem Fehler „Listeniterator nicht inkrementierbar“ führen. Dies liegt daran, dass das Entfernen eines Elements den Iterator ungültig macht.

Vermeiden mehrerer Durchgänge

Um Elemente während der Iteration effizient zu entfernen, sollten Sie einen While-Schleifen-Ansatz in Betracht ziehen:

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

Der Schlüssel hier besteht darin, den Iterator zu erhöhen, bevor das Element entfernt wird. Alternativ kann „i = items.erase(i)“ verwendet werden. Dies ermöglicht das sichere und effiziente Entfernen von Elementen während der Iteration.

Das obige ist der detaillierte Inhalt vonWie lösche 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