減少向量的容量
根據需要,std::vector
會在插入時自動增加其容量,但在元素移除後它永遠不會降低其容量。
// Initialize a vector with 100 elements
std::vector<int> v(100);
// The vector's capacity is always at least as large as its size
auto const old_capacity = v.capacity();
// old_capacity >= 100
// Remove half of the elements
v.erase(v.begin() + 50, v.end()); // Reduces the size from 100 to 50 (v.size() == 50),
// but not the capacity (v.capacity() == old_capacity)
為了減少其容量,我們可以將向量的內容複製到新的臨時向量。新向量將具有儲存原始向量的所有元素所需的最小容量。如果原始載體的尺寸減小是顯著的,那麼新載體的容量減少可能是顯著的。然後我們可以將原始向量與臨時向量交換以保持其最小化容量:
std::vector<int>(v).swap(v);
Version >= C++ 11
在 C++ 11 中,我們可以使用 shrink_to_fit()
成員函式獲得類似的效果:
v.shrink_to_fit();
注意:shrink_to_fit()
成員函式是一個請求,並不保證減少容量。