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 mussthx
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.