mögliche Dubletten Iterieren:
Vector.erase(Iterator) causes bad memory access
iterate vector, remove certain items as I go.Löschen während
Hallo, schrieb ich das, aber ich bin einige Fehler erhalten, wenn es
for (vector< vector<Point> >::iterator track = tracks_.begin(); track != tracks_.end(); track++) {
if (track->empty()) { // if track is empty, remove it
tracks_.erase(track);
track++; // is this ok?
}else { //if there are points, deque
track->erase(track->begin()); //my program crashes here after a while... ;(
}
}
I läuft habe einen Vektor von vecto r von Punkten (2 ints), deren I Tracks aufrufen (1 Track ist 1 Vektor von Punkten) Ich möchte jeden Track überprüfen und wenn sie Punkte enthalten, löschen Sie den ersten Track, ansonsten löschen Sie den Track. Ist das richtig?
Vielen Dank im Voraus.
Welche Fehler werden Sie bekommen:
könnte Ihre Schleife wie folgt geschrieben werden? –
Diese Art von Frage wurde schon oft gestellt. Das erste Ergebnis der Suche nach "C++ iterator löschen" ist http://stackoverflow.com/questions/2943912/vector-erasiterator-causes-bad-memory-access, das auch diese Frage beantwortet. – TheUndeadFish
@ nacho4d: Nicht direkt verwandt, aber werfen Sie einen Blick auf Boost MultiArray für zweidimensionale Strukturen. Es ist etwas einfacher zu verwenden als ein 'std :: vector>' type. –
lunaryorn