30

我实例化一个std::vector foo(1000).

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

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

4

4 回答 4

29

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

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

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

foo.shrink_to_fit();
于 2011-07-30T11:28:04.050 回答
5

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

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

这将创建一个空向量,将其内部结构与 交换foo,然后销毁临时向量,摆脱曾经属于的元素foo并离开foo,就好像它是新创建的一样。

于 2011-07-30T11:53:26.063 回答
2

该标准没有说明 on 的clear影响capacity

于 2011-07-30T11:27:25.067 回答
0

不,清除不会影响它的容量(),即使您清除它也保持不变。如果要缩小向量以适应,可以在调用 clear 后使用以下技巧: foo.swap(vector(foo));

于 2011-07-30T11:26:24.580 回答