您的位置:首页 > Web前端

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不会导致重新分配

为了提高程序执行速度,避免容器内存重新分配很重要!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: