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

Ala*_*ing 24 c++ size vector std capacity

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

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

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

Arm*_*yan 25

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

vector<T>().swap(foo);
Run Code Online (Sandbox Code Playgroud)

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

foo.shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)

  • 在0x中,`vector`有`shrink_to_fit`,但标准说它是非绑定的,我认为这意味着实现不需要实现. (9认同)

fre*_*low 5

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

std::vector<T>().swap(foo);
Run Code Online (Sandbox Code Playgroud)

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