STL vector bzw. deque
-
...ich frage deshalb weil ich eigentlich ein pop(index) auf vector brauche, um das index'te element ausm vektor zu entfernen und weiterzuverwenden.
fuer ideen und tipps schonmal ein grosses dankeschoen.
-
peperonee schrieb:
...bitte nicht erschlagen
ich hab schon in die faqs geguckt und auch im forum gesucht.
ich weiss auch dass es sowas wie erase(reference) fuer STL-vector gibt. die docs fuer STL kenne ich auch.
allerdings erschien es mir beim programmieren etwas seltsam dass ich alle elemente durchgehen muss um das element zu finden welches ich entfernen will.noch eine frage hierzu haette ich dennoch, sofern es auf das benutzen von erase hinauslaeuft: wird das element aus dem vector entfernt UND zerstoert oder nur entfernt?
danke vorab.
Schau dir operator void's Code nochmal an, du musst da keine Elemente
durchgehen, sondern entfernst das Element an der Stelle 'index'.erase() zerstoert keine Objekte, es entfernt sie lediglich aus dem vector.
mfg
v R
-
den code habe ich gerafft, danke.
wollte nur noch wissen ob erase das objekt zerstoert.
danke.
-
Was meinst du überhaupt mit "zerstört"? Wenn es im vector nicht mehr drin ist, wo soll es sonst sein? Manuell ~Obj() aufrufen musst du nicht...
-
wolltest du das wissen?
vector vec<objekt>; vec.erase(vec.begin() + index); vector vec<objekt*>; delete vec[index]; vec.erase(vec.begin() + index);
-
erase(iterator), erase(iterator beg, iterator end), clear() etc. rufen keine
Destruktoren auf. Sie entfernen lediglich die Elemente aus dem Vector. Willst du,
dass die Objekte zerstoert werden (im Sinne von 'delete/delete[]') musst du das
selbst machen.mfg
v R
-
Bist du dir da völlig sicher ?
Wenn Pointer drin sind ist es OK. Da ruft erase() kein delete und somit auch keinen Destruktor auf. Wenn aber Klasseninstanzen drin sind (werden ja kopiert) sollte erase() eigentlich den Destruktor dieser Kopie aufrufen.
-
ja was denn nun?
-
das objekt wird zerstört,der speicher steht aber immeroch unter der kontrolle des vectors.
-
kann ich das objekt was mit erase zurueckgeliefert wird nun verwenden oder nicht? Ich denke schon.
Hat jemand vielleicht ne GUTE Url fuer STL-Doku. Die bekannten sind da leider nicht so ausfuehrlich.
danke.
-
Braunstein schrieb:
Bist du dir da völlig sicher ?
Wenn Pointer drin sind ist es OK. Da ruft erase() kein delete und somit auch keinen Destruktor auf.es sei denn, du hast spezielle pointer, also z.b. eine selbst gecodete smart-pointer klasse
Wenn aber Klasseninstanzen drin sind (werden ja kopiert) sollte erase() eigentlich den Destruktor dieser Kopie aufrufen.
jo, erase() haut sie raus und die instanz verliert somit ihren gültigkeitsbereich -> ab in den papierkorb
-
@todo
Da smart_pointer ja Klassen sind, trifft die zweite Aussage doch zu. Es gibt also keinen Widerspruch.@peperonee
Da erase() die Position des nächsten Elementes ausgibt kannst du getrost damit arbeiten.
Die beste Doku die ich kenne ist allerdings ein Buch (N. Josuttis, The C++ Standard Library).