Wenn Sie v.erase(some_iterator);
Sind Implementierungen intelligent genug, um keine Neuzuweisungen / Byte-Kopien vorzunehmen, da wir nur die Größe aktualisieren können? (Im Gegensatz zum Löschen von streng inneren Elementen.)
Das Löschen von std::vector
macht Iteratoren und Referenzen auf die Elemente vor dem ersten gelöschten Element nicht ungültig.
Wenn Sie also nur das letzte Element löschen, ist garantiert, dass alle anderen Elemente dort bleiben, wo sie sind, sie werden nicht verschoben oder kopiert.
Beachten Sie jedoch, dass das Löschen von std::vector
im Allgemeinen nur seine Größe und nicht seine Kapazität ändert, sodass der Speicher, in dem sich die alten Objekte befanden, immer noch im Besitz von vector
ist. Dies ist aus Performance-Gründen und nichts, worüber Sie sich Sorgen machen müssen (es sei denn, Sie haben keinen RAM mehr).
Außerdem werden die gelöschten Objekte natürlich richtig zerstört, so dass ihre Destruktoren zusätzlich zur Anpassung der Größe vector
ausgeführt werden müssen, wenn sie nicht einfach zu vernichten sind.
Die Vektorkapazität wird nicht durch Löschen geändert. Nur der Zeiger zum Ende wird geändert. Verwenden Sie shrink_to_fit (C ++ 11), um Speicher wirklich freizugeben
%Vor%gibt aus:
%Vor%