einfache frage zu std::list
-
also ich brauche eine liste die pointer enthält.
Ich möchte natürlich werte einfügen und wieder löschen, nur hab ich anscheinend ein problem mit der liste oder den iteratoren, welche ich bisher noch nicht verwendet habe.
kurzum ich bitte um eine fehleranalyse von folgendem code,
compiler-error: unexpectedly finishedhier der code, natürlich stark vereinfacht, also fragen wieso ich eine liste mit int* statt nur int anlege sollten nicht aufkommen, es geht ums prinzip^^
bevor ich meine eigene vermutung anstelle erstmal der code:
#include<iostream> #include<list> using namespace std; int main() { // LISTE ANLEGEN UND FÜLLEN std::list<int*> liste; liste.push_back(new int(53)); liste.push_back(new int(22)); liste.push_back(new int(33)); liste.push_back(new int(16)); liste.push_back(new int(12)); liste.push_back(new int(49)); liste.push_back(new int(35)); liste.push_back(new int(12)); // LISTE AUSGEBEN std::list<int*>::iterator iter; for(iter = liste.begin(); iter != liste.end(); iter++) { int* tmp = *iter; cout << *tmp << endl; } // WERT 12 LÖSCHEN for(iter = liste.begin(); iter != liste.end(); iter++) { int* tmp = *iter; if( *tmp = 12) { delete tmp; tmp = NULL; } liste.erase(iter); } //NOCHMAL AUSGEBEN for(iter = liste.begin(); iter != liste.end(); iter++) { int* tmp = *iter; cout << *tmp << endl; } return 0; }also ich denke dass die schleife beim löschen irgendwelche probleme hat wenn ich erase aufrufe, da ich aber nicht sicher im umgang mit lists und iteratoren bin lass ich mich gern mal belehren
-
shisha schrieb:
hier der code, natürlich stark vereinfacht, also fragen wieso ich eine liste mit int* statt nur int anlege sollten nicht aufkommen, es geht ums prinzip^^
Wäre meine erste Frage gewesen

Zum Kompilerfehler:
Kannst du sagen bei welcher Zeile der auftritt? Und ist das auch wirklich die vollständige Fehlermeldung? Sieht fast mehr aus, als wenn der Kompiler gecrasht als dass dein Code falsch wäre.Zusätzlicher Laufzeitfehler, welcher mir gerade auffiel (Zeile 36):
liste.erase(iter);
Ab dem Zeitpunkt istiterungültig, da du das Element aus der Liste genommen hast. Im Schleifenkopf willst du den Iterator allerdings inkrementieren, was zu einem Laufzeitfehler führen würde. Um diesen Laufzeitfehler zu beheben, schau dir mal den Rückgabewert vonstd::list::erasean
Grüssli
-
Zudem: guck dir mal Zeile 31 an

Du weist *tmp den Wert 12 zu, die Bedingung ist also immer wahr