std :: vector :: reserve失效

时间:2013-06-21 13:36:13

标签: c++ memory-management std

如果我调用std::vector::reserve为我的向量保留一定量的内存,这个内存是否会被分配,直到我销毁vector或者有任何方法调用(也许是clear)这将释放我的保留记忆?

编辑:我将重复使用容器很多次,所以出于性能原因我想避免内存分配。正是出于这个原因,我预先保留了内存,所以我想确定我没有做任何事情来丢失分配的内存。

2 个答案:

答案 0 :(得分:3)

clear仅影响尺寸,而不影响容量。 C ++ 11中的shrink_to_fit可能正是您所寻找的。

答案 1 :(得分:1)

  

编辑:我将重复使用容器很多次,所以出于性能原因我想避免内存分配。正是出于这个原因,我预先保留了内存,所以我想确定我没有做任何事情来丢失分配的内存。

你只需要避免两件事:

1。 shrink_to_fit,但它只是一个释放内存的请求,实际上这不是向量的必要条件。

2。 只有具有空向量的swap才会确定更改容量(请参阅ideone):

vector<int> v;
v.reserve(100);
vector<int>().swap(v);
ASSERT(v.capacity() == 0);

较小的pop_backclearresize都会降低矢量容量。

BTW,请考虑使用std::array<>