C++(STL)容器采用迭代器访问及下标访问的效率详细对比,附详细代码及测试结果。

C++(STL)容器处理大量数据时的遍历操作,代码效率情况如何,今天做一个系统的效能测试,对比不同的遍历访问方法对效率的影响。值得注意的是,容器遍历这种底层操作,往往对上层高度封装后的代码效率产生巨大影响,不可忽视。

我们选用最简单的std::vector容器作为测试目标。先看下测试代码:

void main() {
   	

	std::vector<byte> tagv;              //为节约内存选用一个byte数据类型,类型的不同对测试结果并无影响。
	size_t sit = 10000 * 10000 * 1; //单个类型的测试总数,执行1亿次遍历操作。
	tagv.resize(sit,1);
	size_t aaa = 0;	
	CLTick tk;                      //CLTick 是一个超高精度的计时器,用于记录遍历操作所用时间。

	//方式1:下标访问,多次计算上限。以下简称:[] 方式。
	tk.timingStart();
	for (size_t i = 0; i < tagv.size(); ++i)
		aaa += tagv[i];             //为避免在Release模式下将无效用的变量优化掉,采用一个简单的+操作。	
	double ss0 = tk.getSpendTime();
	
	//方式2:下标访问,单次计算上限。以下简称:[](Single) 方式。
	tk.timingStart();
	for (size_t i = 0,ie = tagv.size(); i < ie; ++i)
		aaa += tagv[i];
	double ss1 = tk.getSpendTime();
	
	//方式3:迭代器访问,前向自加,多次计算上限。以下简称:++i 方式。
	tk.timingStart();
	for (auto i = tagv.begin(); i != tagv.end();
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值