STL-Vector内存机制
来源:互联网 发布:玉环网络安全教育平台 编辑:程序博客网 时间:2024/05/21 12:51
vector可以看作是一个动态数组,其内存是连续的,并具有以下特性:
(1) vector中的size表示当前实际数据数量,capacity 则表示当前可容纳的数量,即已开辟的内存。
(2) 释放(pop_back)、删除(erase) 和 清空(clear) 只会改变size,不会改变capacity 。只有在vector析构的时候才会清空所有内存。
(3) 当追加(push_back)、 插入(insert)等操作导致vector需要扩容时,采用下面准则。(vs2013下Vector源码)
size_type _Grow_to(size_type _Count) const { // grow by 50% or at least to _Count size_type _Capacity = capacity(); _Capacity = max_size() - _Capacity / 2 < _Capacity ? 0 : _Capacity + _Capacity / 2; // try to grow by 50% if (_Capacity < _Count) _Capacity = _Count; return (_Capacity); }
解释一下:设当前容量为a,需要额外增加的容量为b,则扩容后的容量为max(1.5a, a+b).
(4) 扩容时的操作流程为:开辟新内存 -> copy数据 -> 释放旧内存。因此频繁的导致vector扩容(如for循环持续push_back)会使得程序效率降低。因此,如有需要,可以提前通过初始化或者resize、reserve来预先开辟较大的容量。
(5) 如果想要提前释放掉vector开辟的内存,可以使其与一个空vector进行交换,如下:
// 创建一个vectorvector<int> data;for(int i = 0; i < 10; ++i) data.push_back(i);// 与空vector进行交换 vector<int>().swap(data); // 或者data.swap(vector<int>());
阅读全文
1 0
- STL-Vector内存机制
- STL中vector的内存分配机制
- STL中Vector的内存分配机制
- STL vector实现机制
- stl vector 内存管理
- STL---vector内存分配
- stl-vector内存分配
- vector内存释放机制
- vector内存释放机制
- vector内存释放机制
- vector内存释放机制
- STL中Vector内存申请
- STL之vector的内存
- STL之vector内存释放
- vector的内存分配机制
- 【深度探索STL】详解 vector 内部机制
- 快速清除STL::vector的内存
- STL中vector内存分配策略剖析
- 【opencv】目标识别——HSV颜色识别
- [leetcode]: 257. Binary Tree Paths
- 问题分享:Greenplum Compression failed: insufficient memory
- 坚持#第182天~熟能生巧
- IMWeb提升营Day3 | 训练题14:链表中倒数第K个节点
- STL-Vector内存机制
- Visual SLAM梳理
- C++优先队列解决哈夫曼(Huffmam)编码问题 (STL priority_queue)
- Codeforces Round #416 (Div. 2) (based on MSPU Olympiad 2017)
- Vijos P1002 过河
- C++函数新特征与递归函数
- PAT 1009 说反话 (20)
- Leetcode-longest common prefix
- 和云台一起学Linux 之 认识Linux