unterschiedliches Verhalten von Iteratoren ?



  • wieso verhalten sich List-Iteratoren anderes als
    Deque-Iteratoren?

    geht wunderbar:

    for (deque<string>::const_iterator i = strDeque.begin(); i != strDeque.end(); i++)
    {
        if (i != strDeque.begin())
        {cout<<*(i-1)<<endl;}
    }
    

    geht nicht:

    for (list<string>::const_iterator i = strList.begin(); i != strList.end(); i++)
    {
        if (i != strList.begin())
        {cout<<*(i-1)<<endl;}
    }
    

    => Bei Listen schmeckt ihm das "*(i-1)" nicht:

    Fehler E2094 test.cpp 24: 'operator-' ist im
    Typ '_List_iterator<string,_Const_traits<string> >'
    für Argumente des Typs 'int' nicht implementiert in Funktion main()

    Aber wie komm ich dann einfach an vorherige Einträge?
    Kann doch ned sein, dass ich 20 mal i-- machen muss 🙄

    thx
    Martin



  • Der List-Iterator ist bidirektional und nicht random-access - sie sind also von einem anderen Typ -> ja sie verhalten sich anders.

    MfG SideWinder



  • weil std::listystd::string> kein "random access iterator" ist. Du kannst so schreiben:
    [cpp]for (std::list<string>::const_iterator i = strList.begin(); i != strList.end(); i++)
    {
    if (i != strList.begin())
    {
    std::list<string>::const_iterator i1 = i;
    std::advance(i1, -1);

    std::cout<< *i1 <<std::endl;
    }
    } [/cpp]



  • OK,
    danke.


Anmelden zum Antworten