在最近的討論中,使用std:: 的主題出現了vector::reserve() 與std::vector::resize() 。在這篇文章中,我們將深入研究這兩種方法之間的差異。
為了提供上下文,讓我們考慮一個範例程式碼片段:
void MyClass::my_method() { my_member.reserve(n_dim); for (int k = 0; k < n_dim; k++) my_member[k] = k; }
在此程式碼中,目的是建立具有指定容量(n_dim) 的向量,然後迭代該向量,訪問和修改其元素。然而,問題是使用 Reserve() 是否適合此目的。
std::vector::reserve() 旨在分配向量中的記憶體以容納指定數量的元素。然而,它實際上並沒有修改向量的大小。向量的邏輯大小保持不變,這意味著如果您嘗試存取超過當前邏輯大小的元素,則行為未定義。
另一方面,std::vector::resize() 兩者分配記憶體並修改向量的大小。它將向量的邏輯大小設定為指定值。由於調整大小而創建的任何其他元素都會初始化為其預設值(例如,整數為 0)。
在提供的範例程式碼中,使用std ::vector::reserve() 而非std::vector::resize() 可能會導致未定義的行為。程式碼假設呼叫reserve()後向量的大小為n_dim,但事實並非如此。因此,使用 k 大於或等於向量的原始大小來存取 my_member[k] 將導致記憶體存取衝突或其他未定義的行為。
總之,要正確地存取和修改向量中的元素,了解std::vector::reserve() 和std::vector::resize() 之間的區別至關重要。 Reserve() 用於分配記憶體而不調整大小,而 resize() 修改記憶體分配和向量的大小,初始化任何新建立的元素。在提供的範例程式碼中,應使用 std::vector::resize() 來分配記憶體並設定向量的大小,從而能夠正確存取和修改其元素。
以上是`std::vector::reserve()` 與 `std::vector::resize()`:什麼時候該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!