immer noch Iteratoren-Problem
-
Hallo !
Hab' immer noch ein Problem mit Iterator auf den Inhalt eines Vectors :Es gibt eine Methode, die nach einem Eintrag in dem Vector sucht
und einen Iterator darauf zurückgibt :vector<string>::iterator find(vector<string> &vec,string const& key) { for (vector<string>::iterator i = vec.begin(); i != vec.end(); ++i) { if(string(*i) == key) return i; } return vec.end(); }
Wie kann ich bei einem Aufruf der Methode den Iterator überpfüfen, ob er den key gefunden hat, oder nicht ?
In meinem Bsp. sollte man vec.end() zurückbekommen, da das Element nicht existiert.
Bei einem Vergleich mit dem übergebenen Vector geht er aber in beide if-Abfragen.... vector<string> myVec; myVec.push_back("s1"); myVec.push_back("s2"); vector<string>::iterator Iter = find(myVec, "s33"); if(Iter == myVec.end()) //irgendwas if(Iter != myVec.end()) //irgendwas anderes
auch if(Iter == 0) geht nicht
Hat jemand einen Tip ?
-
andiG schrieb:
Bei einem Vergleich mit dem übergebenen Vector geht er aber in beide if-Abfragen.
... if(Iter == myVec.end()) //irgendwas if(Iter != myVec.end()) //irgendwas anderes
Das kann nicht sein, entweder es ist gleich oder es ist ungleich. Beides gleichzeitig gibts nicht.
Mir fällt auch kein Fehler auf, ausser dass man
if (string(*i) == key)
besser so schreibt:
if (*i == key)
-
da hat bashar aber verdammt recht. er kann nicht in beide if-zweige springen. du musst irgend etwas übersehen haben.
der üblichste fehler, der diesen effekt zeigen würde ist das magische fehlersemikolon.if(Iter == myVec.end());//hier magisches fehlersemikolon //irgendwas if(Iter != myVec.end()) //irgendwas anderes[/code]