清除向量会影响它的容量吗?

Does clearing a vector affect its capacity?

本文关键字:容量 向量 影响 清除      更新时间:2023-10-16

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

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

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

不,它没有。向量的容量永远不会减小。这不是标准所要求的,但在vc++和c++的标准库实现中都是如此。为了设置刚好适合大小的容量,可以使用著名的交换技巧

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

在c++ 11标准中,您可以更明确地这样做:

foo.shrink_to_fit();

要清除vector并消耗尽可能少的容量,请使用swap技巧:

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

创建一个空向量,将其内部结构与foo交换,然后销毁临时向量,去掉曾经属于foo的元素,留下foo,就好像它是新创建的一样。

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

标准没有提到clearcapacity的影响