C ++:使用std :: vector :: reserve减少保留空间

时间:2012-04-29 02:14:25

标签: c++ memory-management stdvector

  

可能重复:
  How to downsize std::vector?

根据cppreference,在std :: vector :: reserve(size_t n)中,n是“作为分配存储容量所需的最小量”。我的问题是:如何避免重新分配只知道最大值?

作为一个例子,假设我有一个整数列表,但我不知道这个列表的大小(例如这个列表来自文件的读取)。但我知道这个列表的最大大小是1000.假设列表的实际大小是800.

目前,我使用std :: reserve(1000),然后使用push_back()循环。使用reserve我会阻止任何重新分配。但是如何在push_backs结束时释放额外的空间? (在示例的情况下,如何释放1000-800 = 200额外空间?)

非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用std::vector::shrink_to_fit()

std::vector<int> v;
v.reserve(1000);
for(int i=0;i<800;++i)
    v.push_back(10);

v.shrink_to_fit();

答案 1 :(得分:1)

你基本上需要以正确的大小创建一个新的向量并交换两个向量的内容。幸运的是,在STL中,这是一个单行的例子:How to downsize std::vector?