我实例化std::vector foo(1000)
。
foo.size()
现在为1000,foo.capacity()
也是1000。
如果我使用foo.clear()
清除向量,size()
现在为0,但capacity()
是什么?标准是否对此有所说明?
答案 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)
该标准没有说明clear
对capacity
的影响。
答案 3 :(得分:0)
不,清除不影响它的容量(),即使你清楚也没有。如果要缩小矢量以适合,可以在调用clear后使用以下技巧: foo.swap(矢量(FOO));