Heim >Backend-Entwicklung >C++ >Wie lösche ich Elemente während der Iteration sicher aus einer std::list?
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);
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.
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; } }
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!