iterator operator==
-
Also hier erst mal der Quellcode:
(wahrscheinlich nen ganz offensichtlicher Fehler - aber zumindest nicht für mich ^^)//std::vector <room *> rooms; for (vector <room *>::iterator it (rooms.begin ()); it != rooms.end ();) { //... if ((*it)->isempty ()) //er guckt, ob nen vector leer ist und wenn ja, soll *it gelöscht werden: { //... this->RemoveMe (*it); //it wird gelöscht und aus dem Array (mit erase) gelöscht //... } else { ++it; } bool c (rooms.end () == it); //Fehler!Der Vergleich am Ende war nur, damit es offensichtlicher ist - normalerweise kommt der Fehler erst, wenn er wieder an den Anfang der Schleife "hupft" und dort guckt, ob 'it != rooms.end ();' noch stimmt...
Außerdem stimmen die Werte von 'rooms.end ()' und 'it' lt. Debugger überein - die Typen meiner Ansicht ja auch... Also ich hab keine Ahnung -.-->Fehlermeldung: "vector iterators incompatible" (nicht vom Compiler, sondern vom Debugger)
Meine Frage ist natürlich, was ich falsch mache -.-
Außerdem hab ich noch ne Frage:
vector <room *>::iterator itKann ich stattdessen auch nen const_iterator nehmen? So bald nen erase drin ist, nicht mehr, oder?
Danke schon mal...
Tom
-
Lass mich raten: 'RemoveMe' verändert 'rooms'? Danach ist der Iterator nicht mehr gültig, weil sich der Container verändert hat.
-
schon... (steht ja auch als Kommentar im Quellcode)
aber der iterator hat doch dann den richtigen Wert für das nächste Element oder irre ich mich da? Oo
ich dachte bisher, dass das hier richtig ist (und ich damit das gesamte Array löschen würde, wenn es iwo so stehen würde):for (vector <int>::iterator it (array.begin()); it != array.end();)
{
array.erase (it);
}
-
Das nächste Element wird zurückgegeben also müsste das ungefähr so aussehen:
for (vector <int>::iterator it (array.begin()); it != array.end();) { it = array.erase (it); }
-
Ahhh...
Hätt ich sicherlich au gemerkt, wenn ich ma gelesen hätte aber iwie war ich mir eben doch sicher
Danke : >