如果我调用std::vector::reserve
为我的向量保留一定量的内存,这个内存是否会被分配,直到我销毁vector
或者有任何方法调用(也许是clear
)这将释放我的保留记忆?
编辑:我将重复使用容器很多次,所以出于性能原因我想避免内存分配。正是出于这个原因,我预先保留了内存,所以我想确定我没有做任何事情来丢失分配的内存。
答案 0 :(得分:3)
clear
仅影响尺寸,而不影响容量。 C ++ 11中的shrink_to_fit
可能正是您所寻找的。 p>
答案 1 :(得分:1)
编辑:我将重复使用容器很多次,所以出于性能原因我想避免内存分配。正是出于这个原因,我预先保留了内存,所以我想确定我没有做任何事情来丢失分配的内存。
你只需要避免两件事:
1。 shrink_to_fit,但它只是一个释放内存的请求,实际上这不是向量的必要条件。
2。
只有具有空向量的swap
才会确定更改容量(请参阅ideone):
vector<int> v;
v.reserve(100);
vector<int>().swap(v);
ASSERT(v.capacity() == 0);
较小的pop_back,clear和resize都会降低矢量容量。
BTW,请考虑使用std::array<>。