Hi,
ich hatte vor kurzer Zeit ein ähnliches Problem. Ich wollte aus einem vector bestimmte Elemente löschen. Das funktionierte auch nicht, weil der Iterator ja ungültig wird.
Dazu habe ich remove_if gefunden. In Verbindung mit einem Lambda funktioniert das super, wenn diese Funktion nach der Schleife ausgeführt wird, die bestimmt, welche Elemente gelöscht werden können und diese markiert.
|
C-/C++-Quelltext
|
1
|
std::remove_if(liste.begin(),liste.end(),[](Typ t){return t.loeschen;});
|
Damit wird nicht direkt gelöscht. Sondern es werden nur alle Elemente so sortiert, dass am Anfang der Liste diejenigen stehen bleiben, die gültig sind und am Ende, diejenigen Elemente, die gelöscht werden können. Der Rückgabewert ist ein Iterator auf das erste ungültige Element. Also kann danach von diesem Iterator bis liste.end() alles gelöscht werden.
|
C-/C++-Quelltext
|
1
|
std::erase(std::remove_if(liste.begin(),liste.end(),[](Typ t){return t.loeschen;}),liste,end());
|
Hier gibt es eine gute
Beschreibung mit Beispiel.
Vielleicht hilft dir das ja weiter.
Gruß