Junior — Middle
Wie verhält sich der Container std::vector, wenn man versucht, ein Element hinzuzufügen, wenn seine aktuelle Größe den Grenzwert von capacity erreicht?
sobes.tech KI
Antwort von AI
Wenn in std::vector versucht wird, ein Element mit push_back oder emplace_back hinzuzufügen, und die aktuelle Größe gleich capacity ist (d.h., kein freier reservierter Platz vorhanden ist), passiert Folgendes:
- Es wird ein neuer Speicherblock mit erhöhter Kapazität (in der Regel 1,5 bis 2 Mal größer als die aktuelle) zugewiesen.
- Die bestehenden Elemente werden in den neuen Speicher kopiert oder verschoben.
- Der alte Speicherblock wird freigegeben.
- Das neue Element wird zum Vektor hinzugefügt.
Das bedeutet, dass die Hinzufüg-Operation in diesem Fall zeitaufwändig sein kann, aufgrund der Speicherneuallokation und des Kopierens der Elemente. Daher wird empfohlen, reserve zu verwenden, um die benötigte Kapazität im Voraus zu reservieren, wenn die ungefähre Größe bekannt ist.
Beispiel:
std::vector<int> v;
v.reserve(10); // Reserviere Platz für 10 Elemente
for (int i = 0; i < 10; ++i) {
v.push_back(i); // keine Neuallokation
}
v.push_back(11); // die Kapazität wird erhöht, eine Neuallokation findet statt