STL reserve函数的使用

看到网上很多人说解释reserve函数可以避免内存的重新分配,我看得云里雾里,决定自己做实验来测试一下。到底使用reserve好处在哪。

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
	typedef vector<int>Vint;
	Vint p;
	p.push_back(100);					 //随意初始化一个数。
	int *p1 = &p[0];					 //取得为p分配这块内存的首地址。
	cout << "p 的原始地址为:" << p1 << endl; 
	int reallocatetime = 0;				 // 初始化重新分配内存的次数为0

	for (int i = 0; i < 10000; ++i){
		p.push_back(i);
		if (p1 != &p[0]){
			reallocatetime ++;            //p的首地址发生变化,内存重新分配
			cout << "第" << reallocatetime << "次" << "重新分配内内存之后的首地址为:" << &p[0] << endl;
			p1 = &p[0];
		}
	}
	return 0;
}
output:

下面使用reserve函数预先为p预留一段连续的空间:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
	    typedef vector<int>Vint;
		Vint p;
		<u><span style="color:#ff0000;">p.reserve(1000);    </span></u>                                     //新增加
		p.push_back(99);					 //随意初始化一个数。
		int *p1 = &p[0];					 //取得为p分配这块内存的首地址。
		cout << "p 的原始地址为:" << p1 << endl; 
		int reallocatetime = 0;				 // 初始化重新分配内存的次数为0

		for (int i = 0; i < 10000; ++i){
					p.push_back(i);
					if (p1 != &p[0]){
						reallocatetime ++;            //p的首地址发生变化,内存重新分配
						cout << "第" << reallocatetime << "次" << "重新分配内内存之后的首地址为:" << &p[0] << endl;
						p1 = &p[0];
					}
				}

	    return 0;

}

output:

程序为p重新分配内存的次数明显变少了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值