STL-Container: Probleme beim loeschen...
-
Hi... hab ein kleines Problem, da ich einen stl-container traversiere (ein std::vector, aber ich wollte ihn spaeter noch mit einer std::list ersetzen), und dabei einige Elemente herausloesche... Das Programm ist immer abgestuerzt, ich hab mir also folgendes kleines Testprogramm geschrieben:
#include <list> #include <iostream> using namespace std; const int N = 100; struct foo { int i; foo(int x) : i(x) {} }; int main() { list<foo> l; for (int i = 0; i < N; ++i) { l.push_front(foo(i)); } for (list<foo>::iterator it = l.begin(); it != l.end(); ++it) { if (it->i == 55) { l.erase(it); } cout << it->i << endl; } cin.get(); return 0; }
Ergebnis: nach 55 bricht das Programm einfach ab, was auch irgendwo logisch ist (glaub ich), da die for-Schleife ja den bereits geloeschten Iterator inkrementierten will... Nur: wie kann ich das umgehen?
-
it = l.erase(it);
erase liefter das nächste Element nach dem gelöschten zurück.
-
Hi,
mal so ein Gedankengang:
list<int> menge; // Liste füllen list<int>::iterator ende; ende = remove(menge.begin(), menge.end(), 3); // Alle 3en aus der Menge entfernen //Achtung! Menge ist genauso gross wie vorher! menge.erase(ende, menge.end()); // jetzt sind die überflüssigen Elemente entfernt
MfG