alle Elemente eines Vektors löschen
-
Hi!
Irgendwie wurde ich bei google nicht fündig.
Ich will aus einem Vektor alle Elemente löschen, egal was drin steht, egal an welcher Position, ich will, dass er nach der Operation leer ist.
Gibt es nicht sowas wie vector.eraseAll() oder so?Grüße, pktm
-
pktm schrieb:
Hi!
Irgendwie wurde ich bei google nicht fündig.
Ich will aus einem Vektor alle Elemente löschen, egal was drin steht, egal an welcher Position, ich will, dass er nach der Operation leer ist.
Gibt es nicht sowas wie vector.eraseAll() oder so?Grüße, pktm
vec.clear();BR
Vinzenz
-
Danke

Mich wunderts ein bischen, dass das nicht in der Hilfe zu Vector steht. Zumindest nicht in meiner :-s
-
Eine gute Webseite, hat auch Informationen über andere STL-Typen:
http://www.cppreference.com/cppvector/index.htmlDort sind alle Memberfunktionen, Konstruktoren und überladene Operatoren der STL-Klassen aufgelistet und erklärt.
-
Zu empfehlen ist auch noch:
http://www.cplusplus.com/
-
zu beachten ist, dass
clearden speicher, den der vector für seine elemente verbraucht, nicht freigibt, sondern nur die elemente destruiert.
willst du den vector tatsächlich auf "start" setzen, verwendevoid reset (vector<int>& v) { vector<int>().swap(v); }
-
queer_boy schrieb:
zu beachten ist, dass
clearden speicher, den der vector für seine elemente verbraucht, nicht freigibt, sondern nur die elemente destruiert.
willst du den vector tatsächlich auf "start" setzen, verwendevoid reset (vector<int>& v) { vector<int>().swap(v); }Ist das so im Standard definiert? Ich habe es beim ersten überfliegen nicht gefunden. Im Standard habe ich lediglich gefunden, daß nach clear() die size()==0 sein muß. Ob die capacity sich wirklich ändert, ist so, wie ich es verstanden habe, implementierungsabhängig.
Ich würde mir persönlich nicht allzuviele Gedanken darüber machen, solange es nicht wirklich notwendig ist. Ich verlasse mich lieber auf clear(). Das ist gut lesbar und wartbar, was meistens wichtiger ist, als solche Mikrooptimierungen. Es ist schwer sich eine Situation vorzustellen, daß ein Vektor einen signifikanten Speicherverbrauch hat, geleert werden muß und den Speicher dann nicht mehr braucht.
Und wenn schon so eine reset-Funktion, dann richtig:
template <typename containerType> void reset(containerType& v) { containerType().swap(v); }
-
tntnet schrieb:
Ist das so im Standard definiert? Ich habe es beim ersten überfliegen nicht gefunden. Im Standard habe ich lediglich gefunden, daß nach clear() die size()==0 sein muß. Ob die capacity sich wirklich ändert, ist so, wie ich es verstanden habe, implementierungsabhängig.
eben?
ich habe niemals etwas gegen clear gesagt. wenn sich die capacity nicht ändern muss, etwa weil der vector gleich wieder befüllt werden soll, wäre es ja auch völlig unsinnig so etwas zu tun. nur gehört haben sollte man es mal.