c++ vector中resize、reserve、push_back和capacity
来源:互联网 发布:科比职业生涯数据 编辑:程序博客网 时间:2024/05/26 20:21
因两接口的源代码相当精简,以至于可以在这里贴上它们:
二、http://topic.csdn.net/t/20050121/10/3742864.html
就直接申请另一块可用的连续的空间,把数据拷贝过去,然后删除旧空间,使用新空间
结果造成效率低下
如果在事先预见到有较大空间需求,就可以先用reserve预留一定的空间,避免内存重复分配和
大量的数据搬移。提高了效率
size指的是除去预留的额外空间的所有用来存放数据的空间,resize也好理解,如果说你对某部分
没有进行初始化(比如原本的size是100,现在resize为200个),那就给其余100个调用默认构造函数,
如果是内置类型,初始化为0——我对初始化内置类型这点不是特别肯定,你可以查资料).
举例说:
vector <int>
v.reserve(16);
assert(v.capacity()==16);
vector <int>
cout
Q1.
Q2.
A2: vector, deque和list都提供了resize()这个函数来重设元素个数. 对于新增加的元素怎么初始化,resize通过第2个参数说明.
好了, size()和resize()清楚后,再来看看 reserve()和capacity(), 他是vector特有的,也是由vector的特性所决定的.
假如当vector中可能会存在约500个元素时, 比较两种做法:
1. vector<int> myVec, 然后500次调用 myVec.push_back(****)
2. vector<int> myVec(500), 然后500次调用 myVec.push_back(****)
做法2只需要进行1到2次内存分配,而做法1不知道要进行多少次内存分配了.
现在, 同样,两个问题:
Q1. 当前容器预留了多大空间(在不进行重新分配内存的前提下,最多可以容纳多少个元素)?
Q2. 怎样重设当前容器的预留大小?
A1: capacity().
A2: reserve().
辨析:
所以说resize()和reserve根本是两回事,resize影响元素的个数. reserve只分配预留的空间.
所以 capacity() >= size() 恒成立.
另外有几个问题:
1. vector<int> a(10);
2. 假设vector<int> sample;
当前size()为50, capacity()为100,经过以下操作:
(1) resize(10).
(2) resize(60).
(3) resize(60, 9999).
(4) resize(200). //size() == 200; 50到199下载用默认构造函数填充. capacity() == 200, 自动扩容,重新分配内存.
(6) reserve(60). //size() == 50; 元素没有变, capacity() == 100, 不变. 即reserve调用没起作用.
(7) reserve(200). //size() == 50; 元素没有变, capacity() == 200, 扩容,重新分配内存.
3. vector<int> sample(10);
sample.push_back(999); //size() == 11; reserve () == 15; //自动扩容, reseve为什么不是11呢? 这个超余量是不一定的,也不一定是15.
转自:http://blog.sina.com.cn/s/blog_6cb4f5c7010135yr.html
- c++ vector中resize、reserve、push_back和capacity
- C++ vector中size/resize和capacity/reserve的区别
- vector 中 resize 和reserve
- vector中的 size和 capacity和 reserve和 resize
- vector的reserve和resize以及capacity和size
- STL中vector的capacity、size、reserve、resize
- vector中capacity,reserve
- 深入浅出vector之resize()/reserve(), size()/capacity()
- Vector的使用:resize、size、reserve、capacity
- 深入浅出vector之resize()/reserve(), size()/capacity()
- vector中resize()和reserve()区别
- vector 中resize和reserve的区别
- C++中vector reserve和resize函数
- vector中resize()和reserve()区别
- STL 中vector的reserve()和resize()
- C++中vector<> resize()和reserve区别
- vector 中resize和reserve的区别
- vector::resize() 使用array index 和vector::reserve()使用push_back()的性能差别
- 后台播放music示例
- 如何打造高效团队
- centos 6.2 安装vncsever
- 小四哥的故事——访中联绿盟陈庆
- HitBliss:讨厌广告?如果看广告能让你赚钱呢?
- c++ vector中resize、reserve、push_back和capacity
- 添加局域网打印机(网络打印机)
- WSDL详解(一)
- 为什么Git 比 SVN 好
- 探寻C++最快的读取文件的方案
- 最后一次正确配置的原理
- Lucene入门实例
- JQuery同时选择文本框和密码框并指定样式
- opencv246 + visual studio 2010 学习笔记