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