清除矢量会影响其容量吗?

时间:2011-07-30 11:24:33

标签: c++ vector size std capacity

我实例化std::vector foo(1000)

foo.size()现在为1000,foo.capacity()也是1000。

如果我使用foo.clear()清除向量,size()现在为0,但capacity()是什么?标准是否对此有所说明?

4 个答案:

答案 0 :(得分:22)

不,它没有。向量的容量永远不会减少。这不是标准规定的,但在VC ++和g ++的标准库实现中都是如此。为了将容量设置得足以适合大小,请使用着名的交换技巧

vector<T>().swap(foo);

在C ++ 11标准中,您可以更明确地执行此操作:

foo.shrink_to_fit();

答案 1 :(得分:5)

要清除向量并尽可能少地使用容量,请使用交换技巧:

std::vector<T>().swap(foo);

这会创建一个空向量,用foo交换其内部,然后销毁临时向量,删除曾经属于foo并离开foo的元素,就好像它一样是新创造的。

答案 2 :(得分:2)

该标准没有说明clearcapacity的影响。

答案 3 :(得分:0)

不,清除不影响它的容量(),即使你清楚也没有。如果要缩小矢量以适合,可以在调用clear后使用以下技巧: foo.swap(矢量(FOO));