C++向量内存使用 - 是否曾被释放?

Joh*_*0te 6 c++ stl

我知道,只要capacity()超过它们,矢量就会变大一倍.这个操作需要一些时间,这就是为什么向量应该具有用于​​添加元素的分摊的恒定时间的原因push_back().

  1. 我想知道的是......当矢量缩小以使其size()小于一半时会发生什么capacity().

  2. 载体是否放弃了它们使用的记忆,或者直到载体被破坏为止?

如果它们的尺寸不缩小,可能会浪费很多内存,但我从来没有听说过它们具有这种功能.

SSJ*_*_GZ 12

不,它永远不会被释放(即容量永远不会减少)直到毁灭.释放一些内存的常用习惯是创建一个正确大小的新向量,并使用它来代替:

std::vector<type>(originalVector).swap(originalVector);
Run Code Online (Sandbox Code Playgroud)

(受"更多例外C++"启发,第7项)

  • 被称为[Shrink To Fit](http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Shrink-to-fit). (2认同)