Effective STL 条款14
2016-04-19 09:13
260 查看
使用reserve来避免不必要的重新分配
本节讲解reserve操作的优势,以及重新分配的代价先来讲一下重新分配的代价:
1.分配新的内存块,一般vector和string是成倍增加内存
2.把所有元素从容器的旧内存拷贝到它的新内存
3.销毁旧内存对象
4.回收旧内存
可以看出,重新分配内存的操作是非常耗时的。
接着,解释一下以下几个迭代器函数的功能:
1.size告诉你容器中有多少元素
2.capacity告诉你容器中最多能容纳多少元素
3.resize函数强制把容器容量改为容纳n个元素,如果n小于当前size返回大小,容器尾部的元素会被销毁。如果n大于当前size大小,新默认的元素会添加到容器尾部。如果n大于当前capacity,在元素加入之前发生重新分配
4.reserve强制容器的容量改为至少n,如果n小于当前容量,vector忽略,n大于就重新分配内存。
最后,比较下面两个代码:
代码1:
vector<int>v; for(int i=1;i<=1000;i++) v.push_back(i);
代码2:
vector<int>v; v.reserve(1000); for(int i=1;i<=1000;i++) v.push_back(i);
代码1会导致2到10次重新分配
代码2不会导致重新分配
为了提高程序执行速度,避免容器内存重新分配很重要!
相关文章推荐
- JavaScript调试技巧之console.log()详解
- 引用js或css后加?v= 版本号的用法
- Markdown——入门指南
- 解决angular Js中出现unsafe:data:;base64,的问题
- SQL Server 2016里的sys.dm_exec_input_buffer的问题
- nodejs中异步
- Date Range Picker 插件 bootstrap
- d3js动态柱状图
- bootstrap-标题
- d3js柱状图
- 分享5个主流的HTML5开发工具
- jquery ui autocomplete
- <css 十七>导航栏
- SQL Server 2016里的sys.dm_exec_input_buffer
- javascript 浮点运算
- 《Angular JS 权威教程》 - 内置指令
- JSP页面中的include方法比较
- JSP内置对象
- 推荐10款非常优秀的HTML5开发工具
- JSON的使用_检查JSON工具