Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

1

04.06.2009, 19:04

Iterator / erase [erledigt]

Hallo,

eigentlich ist es ja keine schwere Aufgabe, aber irgendwie bekomme ich es nicht hin... Wie iteriere ich über einen vector, wobei ich bei jeder Iteration unter Umständen ein erase auf dem vector aufrufe? Sprich, wie schaffe ich es, dass der Iterator gültig bleibt?

Danke im Voraus
<< an dieser Stelle ist eine Signatur verstorben >>

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

2

04.06.2009, 19:12

die erase methode ist so nett und gibt dir einen gültigen iterator
zurück, der auf das nächste element zeigt. wenn du aber das letzte element
löschst, zeigt der iterator auf vec.end(). das ist natürlich ein problem wenn
du ++it schreibst.
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

3

04.06.2009, 19:14

Ohje, hab ich total vertan, ich meinte ein std::set und keinen std::vector.
Beim set gibt die erase nix zurück.

edit: Ah und für's set hab ich es grade gefunden, einfach ein post-inkrement verwenden... ist erledigt :D
<< an dieser Stelle ist eine Signatur verstorben >>

4

05.06.2009, 13:05

Für Iteratoren würde ich grundsätzlich Präfix-Inkrement verwenden, wenn du nur ein Element weitergehen willst und die Semantik des Postfix-Inkrements (alten Wert zurückgeben) nicht benötigst.

Zudem musst du aufpassen, wenn du erase() nutzt. Auch in einem std::set werden Iteratoren ungültig, also schau, dass du nicht während des Iterierens löschst.

Werbeanzeige