std::vector::resize() vs. std::vector::reserve()
Beim Arbeiten mit dynamischen Arrays in C ist es wichtig, den Unterschied zwischen std::vector::reserve() und std::vector::resize() zu verstehen. Beide dienen bestimmten Zwecken und können sich erheblich auf die Leistung auswirken.
std::vector::reserve()
Wie der Name schon sagt, reserviert „reserve()“ Speicher für einen bestimmten Zeitraum Anzahl der Elemente, ohne die Größe des Vektors zu ändern. Dies ist nützlich, um die Speicherzuteilung zu optimieren, wenn Sie die maximale Anzahl der Elemente kennen, die Sie benötigen. Es vermeidet unnötige Neuzuweisungen, die auftreten, wenn der Vektor über seine aktuelle Kapazität hinauswächst.
std::vector::resize()
Auf der anderen Seite resize() Beide reservieren Speicher und ändern die Größe des Vektors auf die angegebene Größe. Im Gegensatz zu „reserve()“ fügt resize() dem Vektor leere (oder standardmäßig initialisierte) Elemente hinzu, wenn die neue Größe größer als die aktuelle Größe ist. Wenn die neue Größe kleiner ist, werden Elemente über der neuen Größe abgeschnitten.
Korrekte Verwendung im Beispiel
In Ihrem Beispielcode versuchen Sie, Elemente zu schreiben zum Vektor nach dem Aufruf von Reserve(). Dies führt zu Fehlern in Debug-Builds, da Reserve() die Größe des Vektors nicht ändert. Um Elemente korrekt in den Vektor zu schreiben, müssen Sie resize() verwenden:
void MyClass::my_method() { my_member.resize(n_dim); for (int k = 0; k < n_dim; k++) my_member[k] = k; }
Fazit
Sowohl std::vector::reserve() als auch std ::vector::resize() dienen unterschiedlichen Zwecken. Reserve() optimiert die Speicherzuweisung, während resize() die Größe des Vektors ändert und gleichzeitig die interne Datengültigkeit beibehält. Wenn Sie ihre Unterschiede verstehen, können Sie sie effektiv nutzen, um die Leistung Ihres C-Codes zu verbessern.
Das obige ist der detaillierte Inhalt von„std::vector::reserve()' vs. „std::vector::resize()': Wann sollte ich welche verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!