1

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

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

4

2 回答 2

3

clear只影响大小,不影响容量。shrink_to_fit在 C++11 中可能是您​​正在寻找的。

于 2013-06-21T13:38:45.940 回答
1

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

你只需要避免两件事:

1. shrink_to_fit,但这只是一个释放内存的请求,并不是vector真正必须这样做的。

2.只有swap空向量才会改变容量(见ideone):

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

pop_back 、clearresize都不会减少向量容量。

顺便说一句,考虑使用std::array<>

于 2013-06-21T15:19:59.653 回答