Ich habe eine std::vector
mit Elementen einer Klasse ClassA
. Zusätzlich möchte ich einen Index unter Verwendung einer std::map<key,ClassA*>
erstellen, die einen Schlüsselwert auf Zeiger auf Elemente abbildet, die in dem Vektor enthalten sind.Zeiger auf Elemente von Std :: Vektor und Std :: Liste
gibt es keine Garantie, dass diese Zeiger gültig bleiben (und auf dasselbe Objekt) wenn Elemente hinzugefügt sind am Ende des Vektors (nicht eingefügt). Das heißt, würde der folgende Code korrekt sein:
std::vector<ClassA> storage;
std::map<int, ClassA*> map;
for (int i=0; i<10000; ++i) {
storage.push_back(ClassA());
map.insert(std::make_pair(storage.back().getKey(), &(storage.back()));
}
// map contains only valid pointers to the 'correct' elements of storage
Wie ist die Situation, wenn ich std::list
statt std::vector
?
Was ist der Zweck des Vektors hier? Müssen Sie sich an die Reihenfolge erinnern, in der sie erstellt wurden? Sie könnten stattdessen die Karte und vecor verwenden. Iteratoren/Zeiger/Verweise auf Elemente einer Karte bleiben länger gültig. Sehen Sie sich die Garantien Ihrer bevorzugten Standard-Bibliotheksreferenz an. –
sellibitze