减少矢量的容量

根据需要,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() 成员函数是一个请求,并不保证减少容量。