Vector<string> mit iterator durchlaufen, stehe auf dem schlauch
-
Hallo, hier erstmal der folgende simple code:
vector<string>::iterator it = ActionVector.begin()+1; for(;(it -> find("BeginAction") == string::npos) and (it < ActionVector.end());it++);wenn ich diese for schleife verwende läuft it anscheinend aus dem gültigkeitsbereich hinaus. Wenn ich die gleiche Schleife ohne den "it -> find("BeginAction"...)" krams benutze und nur "it< ActionVector.end()" verwende funktioniert sie und it bleibt im gültigkeitsbereich.
Wie kann das sein? Das and müsste ja wenn überhaupt zu einer geringeren Wiederholungszahl der Schleife führen. Woher kommt das Überschreiten der Gültigkeit von it?
-
Statt
vector<string>::iterator it = ActionVector.begin()+1; for(;(it -> find("BeginAction") == string::npos) and (it < ActionVector.end());it++);besser
vector<string>::iterator it = ActionVector.begin()+1; for(;(it < ActionVector.end()) and (it -> find("BeginAction") == string::npos);it++);
-
Danke, daran erinnere ich mich jetzt auch gerade, hatten wir im C-Kurs an der Uni.
-
volkard schrieb:
Statt
vector<string>::iterator it = ActionVector.begin()+1; for(;(it -> find("BeginAction") == string::npos) and (it < ActionVector.end());it++);besser
vector<string>::iterator it = ActionVector.begin()+1; for(;(it < ActionVector.end()) and (it -> find("BeginAction") == string::npos);it++);Sollte besser
it != ActionVector.end()sein, damit man bei Containeränderung nicht Performance verliert.Aber ne Frage zu der "kursschlussauswertung", ist das so vom Standard garantiert, dass die Auswertung des zweiten Terms nur erfolgt, wenn die Auswertung des ersten Terms true ergeben hat?
-
bmario_ schrieb:
Aber ne Frage zu der "kursschlussauswertung", ist das so vom Standard garantiert, dass die Auswertung des zweiten Terms nur erfolgt, wenn die Auswertung des ersten Terms true ergeben hat?
Ja. Steht direkt beim logischen Und-Operator.
-
bmario_ schrieb:
Sollte besser
it != ActionVector.end()sein, damit man bei Containeränderung nicht Performance verliert.Wird ein Iterator bei einer Containeränderung nicht sowieso ungültig?
-
Gugelmoser schrieb:
bmario_ schrieb:
Sollte besser
it != ActionVector.end()sein, damit man bei Containeränderung nicht Performance verliert.Wird ein Iterator bei einer Containeränderung nicht sowieso ungültig?
Das war nicht gemeint.
Sondern, wenn man den Code ändert und aus dem vector eine zum Beispiel list macht.