Ich plane, eine Liste von Dingen in C++ zu implementieren, in der Elemente möglicherweise außer Betrieb genommen werden. Ich erwarte nicht, dass ich irgendeine Art von Zufallszugriff benötige (ich muss nur die Liste regelmäßig fegen), und die Reihenfolge der Elemente ist auch nicht wichtig.Was ist die Lebensdauer und Gültigkeit von C++ Iteratoren?
Also dachte ich an std::list<Thing*> with this->position = insert(lst.end(), thing)
sollte den Trick tun. Ich möchte, dass sich die Thing-Klasse an die Position der einzelnen Instanzen erinnert, so dass ich später problemlos in konstanter Zeit lst.erase(this->position)
tun kann.
Allerdings bin ich noch ein wenig neu in C++ - STL-Container, und ich weiß nicht, ob es sicher ist, Iteratoren für so lange Zeit zu halten. Vor allem, da vor und nach dem eingefügten Ding noch weitere Elemente gelöscht werden, bevor es weg ist.
Gute Antwort, es würde auch helfen zu wissen, welche Gründe eine Vektorumleitung verursachen könnte. (Das Einfügen eines Elements ist das Offensichtliche, aber gibt es andere?) – Malabarba
Jede Änderung des Vektors (sowohl Einfügen als auch Entfernen) erlaubt es, Iteratoren neu zuzuordnen und ungültig zu machen; ob dies der Fall ist oder nicht, ist implementationsdefiniert. Sie gehen also davon aus, dass das Ändern eines Vektors in irgendeiner Weise alle vorhandenen Iteratoren ungültig macht. – Miral