Das ist vor allem ein generelles Problem von Containern. Jeder Container hat seine eigenen Charakteristiken, dazu zählt auch das Verhalten bei Löschen eines Elements. Zum std::vector steht z.B. in der Dokumentation, dass bei Löschen eines Elements alle Iteratoren auf dieses Element und alle Iteratoren auf Elemente dahinter ungültig werden. Für std::list oder std::slist gilt: nur Iteratoren auf das gelöschte Element werden ungültig, aber Iteratoren auf Elemente dahinter bleiben gültig.
Ich bin verblüfft, wie weit man bei der Programmierung kommen kann, ohne solch elementaren Sachen draufzuhaben. Das ist wichtig, Leute. Wirklich. Auch die Geschichte mit dem Iterator-Vergleich. KleinerAls, GrößerAls und solche Sachen funktionieren nur, falls die Iteratoren wirklich unmittelbar als Zeiger implementiert sind und falls der Container ein einziger kontinuierlicher Speicherblock ist. Das gilt nach meinem Wissen nur für std::vector und std::stack, der ja von vector abgeleitet ist. Für std::list, std::slist und auch für alle anderen node-basierenden Container klappt das nur durch Zufall, weil der Heap neue Allokationen zumeist mit aufsteigenden Adressen ausgibt. Aber wehe, Dein Programm läuft schon ein bisschen, oder der Heap ist ein bisschen anders implementiert. Solche Fehler sind eine offene Einladung für absurde Crashes und Fehlverhalten, die nur manchmal auftreten und schwer zu debuggen sind.