Sobes.tech
Middle

Was passiert mit dem Vektor (std::vector), wenn ein Element hinzugefügt wird?

sobes.tech KI

Antwort von AI

Beim Hinzufügen eines Elements zu std::vector (zum Beispiel mit push_back) erfolgen die folgenden Schritte:

  1. Kapazitätsprüfung: Der Vektor überprüft, ob der aktuell zugewiesene Speicher (Kapazität) ausreicht, um ein neues Element aufzunehmen.
  2. Erweiterung, falls erforderlich:
    • Wenn size() < capacity(), wird das neue Element einfach an der nächsten freien Stelle platziert, und size() wird um 1 erhöht.
    • Wenn size() == capacity(), muss der Vektor seine Kapazität erhöhen. Dies geschieht in der Regel durch Zuweisung eines neuen, größeren Speicherblocks. Die Größe des neuen Blocks ist typischerweise mehrere Male größer als die aktuelle (z.B. Verdopplung).
  3. Kopieren/Bewegen der Elemente (bei Erweiterung): Alle bestehenden Elemente aus dem alten Speicherblock werden kopiert (oder verschoben, wenn der Elementtyp Bewegung unterstützt und ein geeigneter Konstruktor/Operator vorhanden ist) in den neuen Speicherblock.
  4. Platzierung des neuen Elements: Das neue Element wird am Ende des neuen Speicherblocks hinzugefügt.
  5. Freigabe des alten Speichers: Der alte Speicherblock wird freigegeben.
  6. Aktualisierung der Zeiger/Größen: Die internen Zeiger (die auf den Anfang und das Ende der Daten sowie auf das Ende des zugewiesenen Speichers zeigen) werden aktualisiert, und auch der Wert von size() wird erhöht.

Diese Operation kann teuer sein, da sie mögliche Speicherneuzuweisungen, Kopien/Bewegungen von Elementen und Freigaben alten Speichers umfasst. Sie kann auch Iteratoren und Referenzen invalidieren, die auf die Elemente des Vektors vor der Hinzufügung zeigen.