STL方法中,resize()和reserve()的区别和用途
来源:互联网 发布:java中重写和重载 编辑:程序博客网 时间:2024/06/05 01:53
之前对二者用法总是混淆,所以花时间仔细研究了一下,并在vs2013下测试了一些简单的vector<int>的例子,总结如下:
resize():改变当前容器内含有元素的数量(size()),eg: vector<int>v; v.resize(len);v的size变为len,如果原来v的size小于len,那么容器新增(len-size)个元素,元素的值为默认为0.当v.push_back(3);之后,则是3是放在了v的末尾,即下标为len,此时容器是size为len+1;
reserve():改变当前容器的最大容量(capacity),它不会生成元素,只是确定这个容器允许放入多少对象,如果reserve(len)的值大于当前的capacity(),那么会重新分配一块能存len个对象的空间,然后把之前v.size()个对象通过copy construtor复制过来,销毁之前的内存;
只有当容器内元素数(size)大于capcity时,容器才会改变地址。
vector<int> v;
当v.resize(len)中len>v.capacity(),则v中的size和capacity均设置为len;
当v.resize(len) 中len<=v.capacity(),则v中的size设置为len,而capacity不变; 如果此时len<v.size(),那么多出的那些对象(v[len], v[len+1]…)会被销毁,v[0]-v[len-1]仍保留在原地。
当v.reserve(len)中len>v.capacity(),则v中的capacity变为len,size不变,size只跟容器中元素数和resize有关(v.resize(len)将原来不存在的元素设为初值0)。
当v.reserve(len)中len<=v.capacity(),则v中的capacity不变,size不变,即不对容器做任何改变。
总结:size可能改变capacity,但capacity不会改变size;
- STL方法中,resize()和reserve()的区别和用途
- stl::vector reserve和resize的区别
- C++ STL reserve和resize的区别
- C++ STL reserve和resize的区别
- C++ STL reserve和resize的区别
- stl reserve和resize区别
- STL 中vector的reserve()和resize()
- STL的reserve和resize
- 容器中resize和reserve的区别
- C++中resize()和reserve()的区别
- vector 中resize和reserve的区别
- vector 中resize和reserve的区别
- reserve和resize的区别
- STL中vector的resize和reserve问题(转载)
- STL-vector中reserve和resize的区…
- resize和reserve区别
- vector中resize()和reserve()区别
- vector中resize()和reserve()区别
- django命令卡死问题解决
- google浏览器设置不缓存的方法
- eclipse+Maven安装和配置
- 编程语言浅述
- Android性能优化
- STL方法中,resize()和reserve()的区别和用途
- iOS中的单例创建
- LeetCode 520. Detect Capital (字符串)
- 正则表达式快速入门
- Dubbo各种协议
- Java的四种线程池的使用
- INFORMATION_SCHEMA获取数据库的信息
- 2017值得参加的人工智能大会
- Kotlin系列一(基本语法)