Deque Iterator Incompatibel
-
Hallo Zusammen

Zum Problem. Ich schreibe ein Programm zu Lagerverwaltung, jedoch ergibt sich jetz ein Problem mit der funktion deque.erase(iterator). Hier erstmal der code:
deque<string> Impnames; deque<string>::iterator iiter = Impnames.begin(); deque<string> Availnames; deque<string>::iterator aiter = Availnames.begin(); { //... Hier werden die beiden Deque's mit werten gefüllt } for(iiter=Impnames.begin();iiter!=Impnames.end();++iiter){ for(aiter=Availnames.begin();aiter!=Availnames.end();++aiter){ if(aiter==iiter){ aiter=Availnames.erase(aiter); break; }; }; }; ...Ich weiß dass der Fehler in den for-Schleifen liegt.
Beim Debuggen des Programms kommt dann das Fehlerfenster:
Debug Assertion Failed!
File: c:\...\vc\include\deque
Line: 318Expression: deque iterators incompatible
...Hab bereits gegoogelt. Das Problem soll daran liegen, dass beim löschen der iterator seine position verliert und damit ungültig wird.
Es gäbe zwar die möglichkeit das ganz mittels deque.at(position) zu lösen, jedoch würde ich es schon ganze gerne mit iteratoren lösen (zwecks lernen).Besten dank im vorraus

-
aiter==iiter
du kannst nicht 2 iteratoren vergleichen die auf unterschiedliche sequenzen zeigen. willst du hier nicht uU ein *aiter == *iiter haben? also die strings vergleichen auf die diese beiden iteratoren verweisen?
-
Oh man, da liegt einem die Lösung direkt vor Augen aber man sieht sie nicht.
Funktioniert

Vielen Vielen Dank