element aus pos a der liste entfernen
-
hallo
ich hab folgendes Problem
Ich möchte wie oben beschrieben an der a-ten Stelle ein Element entfernen. Kiregs aber nicht gebacken.
muss das la mit erase machen.
Hatte mir das weil mir nix besseres einfiel in etwa so forgestellt. klappt aber nicht.int j=0; for (i = liste.begin(); i!= liste.end(); ++i) { if (a==j) liste.erase(i); j++; } }Wie mach ich dat?
Und wie setzte ich den iterator an a-te Stelle hab bislang nur gefunden wie man ihn an die erste und auf die eltzte Position zeigen lässt
-
Dein Code ist gefährlich, weil erase() den Iterator ungültig macht. Das führt zu undefiniertem Verhalten. Du müsstest den Code so ergänzen:
int j=0; for (i = liste.begin(); i!= liste.end(); ++i) { if (a==j) { liste.erase(i); break; // Iterator i nicht weiter verwenden! } j++; } }... dann sollte er auch funktionieren.
std::advance() macht übrigens dasselbe, nur dass die Funktion effektiver arbeitet, falls ein Random-Access-Iterator übergeben wird:
#include <iterator> Listentyp::iterator iter = liste.begin(); std::advance(iter, a); liste.erase(iter);Stefan.