Seite 1 von 1

[gelöst] for(x:y) mit wechselndem y?

Verfasst: 5. August 2014 10:13
von kalsan
Hallo allerseits!
Ich habe einen for-loop mit for(Klausel* jetztKlausel : container) und suche im Container nach erfüllten Klauseln. Ist eine Klausel erfüllt, wird eine gewisse Anzahl Klauseln aus dem Container entfernt (möglicherweise nur eine, möglicherweise alle).
Muss ich dann ein break setzen, oder darf ich einfach weiterparsen, als sei nichts geschehen?
lg,
Kalsan

Re: for(x:y) mit wechselndem y?

Verfasst: 6. August 2014 06:21
von Christian81
Wenn es ein Container ist, solltest Du mit iteratoren arbeiten. In einem std::vector<> gibt es z.B. die Funktion erase welche Dir beim Löschen den Iterator auf das nächste Element zurückgibt: http://www.cplusplus.com/reference/vector/vector/erase/

Re: for(x:y) mit wechselndem y?

Verfasst: 6. August 2014 14:01
von kalsan
Vielen Dank für deine Antwort. Es handelt sich um eine list, nicht um einen vector.
Das Problem ist, dass ein Element, das mit erase entfernt wird, anscheinend auch aus dem Heap entfernt wird. Ich möchte aber nur den Pointer aus der Liste entfernen. Weitere Pointer in anderen Datenstrukturen (und somit auch das Element, auf das gezeigt wird) sollen erhalten bleiben. Wie mache ich das am elegantesten? Habe noch nie Iterators benutzt.
lg
Kalsan

Re: for(x:y) mit wechselndem y?

Verfasst: 6. August 2014 17:48
von Christian81
Bei der list ist es genauso. Und wenn du einen Pointer in der Liste speicherst (und es eine std::list ist) dann wird dieser auch nicht automatisch gelöscht.
std::list<>::erase() : http://www.cplusplus.com/reference/list/list/erase/

Re: for(x:y) mit wechselndem y?

Verfasst: 6. August 2014 19:20
von kalsan
Herzlichen Dank!
Ich hatte den Satz
This effectively reduces the container size by the number of elements removed, which are destroyed.
falsch verstanden. Ich dachte, das element würde entfernt werden, und nicht einfach der Pointer.
Ich denke, dies beantwortet meine Frage :-)
lg
Kalsan