C++-Standard-Vektor-resize()-Funktion

C++-Standard-Vektor-resize()-Funktion

Von dieser Seite:

  • resize() :Hiermit können Sie die Größe des Vektors auf jede gewünschte Größe ändern.
    • Es wird den zugrunde liegenden Puffer mit Elementen füllen.
  • reserve() :Dies ändert die Kapazität des Vektors. Beachten Sie, dass dies nicht die Größe des Vektors ändert, sondern nur die Größe des zugrunde liegenden Puffers, um mehr Platz für die Erweiterung des Puffers zu schaffen, bevor die Größe des Puffers geändert werden muss. Im Gegensatz zum Aufruf von resize() , ändert dies nicht das Verhalten des Programms, sondern nur die Leistung (Die nachfolgende Verwendung des reservierten Speicherplatzes führt zu keiner Leistungseinbuße für inkrementelle Reservierungen).
    • Die Größe des Puffers wird nicht begrenzt. Wenn der Puffer keinen Platz mehr hat, wird er nach Bedarf automatisch neu zugewiesen.

vector.reserve(5); Wäre in diesem Fall überflüssig.

Für dieses Ziel hängt es davon ab, wie Sie die Werte überschreiben möchten.

  • Wenn Sie direkt nach Index schreiben möchten, müssen Sie resize() verwenden .
  • Wenn Sie push_back() verwenden , dann reserve() wäre besser, damit Sie die Erstellung von X vermeiden können zweimal.

Beachten Sie, dass der für die automatische Reservierung verwendete Algorithmus implementierungsdefiniert ist. Weitere Informationen zum Leistungsaspekt finden Sie hier.


Ich weiß nicht, woher Sie Ihre Informationen über reserve haben , aber es wird neu zugewiesen, wenn die Zahl, die Sie ihm übergeben, größer ist als die aktuelle Kapazität des Vektors, wie von capacity gemeldet Funktion.

Wie bei resize , muss die Anzahl der Elemente festgelegt werden, und wenn die Kapazität nicht ausreicht, ist auch eine Neuzuweisung erforderlich.

Was Ihr Code-Snippet angeht:

std::vector<X> vector;
vector.reserve(5);
vector.resize(5);

Dies kann sinnvoll sein, wenn Sie die minimal mögliche Menge zuweisen möchten, um 5 Elemente zu speichern. Ich sage das, weil resize könnte in Erwartung weiterer Ergänzungen später mehr zuweisen (um klar zu sein, dies kann nur passieren, wenn die angeforderte Größe größer als die Kapazität ist. resize führt niemals zu einer Neuzuweisung, wenn die angeforderte Größe <=Kapazität ist). reserve auf der anderen Seite weist normalerweise gerade genau genug zu. Es ist erlaubt, mehr zuzuweisen, aber ich habe noch nie eine Implementierung gesehen, die das tut.


Der Hauptunterschied zwischen ihnen besteht darin, dass Sie mit resize die Größe ändern (entweder vergrößern oder verkleinern) können, während Reserve nur Speicher vom System reserviert. Resize initialisiert zugewiesenen Speicher entweder mit einem Aufruf an den Standardkonstruktor oder den Kopierkonstruktor basierend auf der Form der verwendeten Größenänderung.

Beides kann zu einer Neuzuweisung des Speichers führen.