理解差異:std::vector::resize() 與std::vector::reserve()
主題std:: vector::reserve() 與std::vector::resize() 的比較引發了程式設計社群內的討論。本文旨在闡明它們在向量操作中的不同作用。
std::vector::reserve()
std::vector::reserve() 分配記憶體指定數量的元素,但不調整向量本身的大小。該向量保持其原始邏輯大小。當您預計向向量添加元素並希望透過預先分配記憶體來優化效能時,此方法很有用。
std::vector::resize()
std: :vector::resize() 將向量的大小修改為指定的元素數量。如果向量需要擴展,它將分配額外的記憶體。與 Reserve() 不同,resize() 將所有新元素初始化為其預設值。
範例用法
考慮問題中提供的程式碼:
void MyClass::my_method() { my_member.reserve(n_dim); for (int k = 0; k < n_dim; k++) my_member[k] = k; }
根據回复,這裡使用reserve()是不正確的。要正確地將元素寫入向量,應該使用resize():
void MyClass::my_method() { my_member.resize(n_dim); for (int k = 0; k < n_dim; k++) my_member[k] = k; }
Visual Studio 2010 SP1 行為
提到的程式碼的「崩潰」行為Visual Studio 2010 SP1 中的行為與回應中所述的正確行為一致。在調整向量大小之前嘗試存取超出向量邏輯大小的元素(在本例中為 my_member[5])會導致未定義的行為。
保留和失效
需要注意的是,使用reserve()然後透過push_back()添加元素可能會使引用、迭代器或指向資料的指標無效。向量。這是因為 Reserve() 分配記憶體時沒有調整大小,當新增元素時,它們可能會被放置在不同的位置。
綜上所述,std::vector::reserve() 和 std::vector ::resize() 有不同的目的。 Reserve() 預先分配內存,而 resize() 修改向量的大小並初始化新元素。了解它們的差異對於有效的向量操作至關重要。
以上是std::vector::reserve() 與 std::vector::resize():我什麼時候該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!