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]
    

Anmelden zum Antworten