減少向量的容量

根據需要,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() 成員函式是一個請求,並不保證減少容量。