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

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
kalsan

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

Beitrag 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
Zuletzt geändert von kalsan am 6. August 2014 19:21, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag 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/
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
kalsan

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

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

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

Beitrag 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/
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
kalsan

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

Beitrag 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
Antworten