std::vector::resize() vs. std::vector::reserve()
In C ist std:: Vektor ist ein häufig verwendeter Container zum Speichern von Elementen desselben Typs. Es bietet zwei Methoden, std::vector::reserve() und std::vector::resize(), die unterschiedliche Rollen bei der Speicherverwaltung spielen.
std::vector::reserve()
std::vector::resize()
Anwendung im bereitgestellten Code
Im angegebenen Beispielcode ist der Mitgliedsvektor my_member anfänglich Zugeordneter Speicher für n_dim-Elemente mit std::vector::reserve(). Es werden jedoch keine Elemente initialisiert und der Zugriff auf Elemente über der aktuellen logischen Größe (0) würde zu undefiniertem Verhalten oder Fehlern führen.Um Elemente in den Vektor zu schreiben, sollte std::vector::resize() sein gebraucht. In diesem Fall würde die Größe des Vektors auf n_dim geändert und alle Elemente auf Null initialisiert werden.VS2010 SP1-Verhalten
Der bereitgestellte Testcode schlägt in Debug-Builds mit VS2010 SP1 fehl, weil Es wird versucht, auf Element 5 eines Vektors mit nur einer logischen Größe von 0 zuzugreifen. Dies gilt als undefiniertes Verhalten und führt zu a Absturz im Debug-Modus.Fazit
Basierend auf den bereitgestellten Informationen ist es richtig, std::vector::resize() zu verwenden, wenn Elemente geschrieben werden müssen zum Vektor. std::vector::reserve() sollte verwendet werden, wenn bekannt ist, dass zukünftige Einfügungen erfolgen werden und Speicher dafür im Voraus reserviert werden sollte, Elementwerte jedoch nicht im Voraus initialisiert werden müssen.Das obige ist der detaillierte Inhalt von„std::vector::reserve()' vs. „std::vector::resize()': Wann sollte man welche für eine effiziente Speicherverwaltung verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!