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
[gelöst] for(x:y) mit wechselndem y?
[gelöst] for(x:y) mit wechselndem y?
Zuletzt geändert von kalsan am 6. August 2014 19:21, insgesamt 1-mal geändert.
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: for(x:y) mit wechselndem y?
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
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: for(x:y) mit wechselndem y?
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
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
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: for(x:y) mit wechselndem y?
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/
std::list<>::erase() : http://www.cplusplus.com/reference/list/list/erase/
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: for(x:y) mit wechselndem y?
Herzlichen Dank!
Ich hatte den Satz
Ich denke, dies beantwortet meine Frage
lg
Kalsan
Ich hatte den Satz
falsch verstanden. Ich dachte, das element würde entfernt werden, und nicht einfach der Pointer.This effectively reduces the container size by the number of elements removed, which are destroyed.
Ich denke, dies beantwortet meine Frage
lg
Kalsan