我实例化一个std::vector foo(1000)
.
foo.size()
现在是 1000,foo.capacity()
也是 1000。
如果我用 清除向量foo.clear()
,size()
现在是 0,但是 是什么capacity()
?标准对此有任何说明吗?
不,它没有。向量的容量永远不会减少。这不是标准规定的,但在 VC++ 和 g++ 的标准库实现中都是如此。为了将容量设置为刚好适合大小,请使用著名的交换技巧
vector<T>().swap(foo);
在 C++11 标准中,您可以更明确地执行此操作:
foo.shrink_to_fit();
要清除向量并尽可能少地消耗容量,请使用交换技巧:
std::vector<T>().swap(foo);
这将创建一个空向量,将其内部结构与 交换foo
,然后销毁临时向量,摆脱曾经属于的元素foo
并离开foo
,就好像它是新创建的一样。
该标准没有说明 on 的clear
影响capacity
。
不,清除不会影响它的容量(),即使您清除它也保持不变。如果要缩小向量以适应,可以在调用 clear 后使用以下技巧: foo.swap(vector(foo));