C++ vector 内存使用 - 它曾经被释放过吗?

标签 c++ stl

我知道,当超过 capacity() 时, vector 的大小会加倍。这个操作需要一些时间,这就是为什么 vector 应该有分摊常数时间来使用 push_back() 添加元素。

  1. 我想知道的是...当一个 vector 缩小到 size() 小于 capacity()< 的一半时会发生什么.

  2. vector 是否会放弃它们使用的内存,或者直到 vector 被销毁它才消失?

如果它们不缩小尺寸,可能会浪费大量内存,但我从未听说过它们具有该功能。

最佳答案

不,它在销毁之前永远不会被释放(即容量永远不会减少)。释放一些内存的常用习惯是创建一个正确大小的新 vector ,然后使用它:

std::vector<type>(originalVector).swap(originalVector);

(灵感来自“更出色的 C++”,第 7 项)

关于C++ vector 内存使用 - 它曾经被释放过吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7177864/

相关文章:

C++ 宏扩展到函数体

c++ - 如何让编译器使用 std::map 进行循环不变代码运动?

c++ - 在 C++ 中使用 std::begin(collection) 与 collection.begin()

c++ - 如何使用递归类模板在 C++11 中写出元组的内容?

c++11 - move 容器的迭代器?

c++ - FFmpeg c++ 如何获取时间戳(自拍摄帧的纪元以来的秒数)

c++ - openCV - 网络摄像头的视频捕获 - 延迟问题

c++ - emplace_back 与初始值设定项列表

c++ - 为什么 range v3 算法不可通过管道传输?

c++ - 替换默认的 STL 分配器