++i比i++快的原因

原文

一直都知道这个事实,C++ primer上看到的,知道是底层代码实现造成的,但是不清楚代码长什么样,今天偶遇了
在这里插入图片描述

今天自己写迭代器的类,需要重载递增运算符,就需要写前缀版本和后缀版本,自己动手,更加透彻的明白了效率差别:

class iterator{
	Node * pt;//私有数据是一个Node指针
public:
	iterator():pt(0){}
	iterator(Node * pn):pt(pn){}
	//重载*运算符函数,实现迭代器的解引用功能
	double operator*(){return pt->item;}
	//重载++运算符
	iterator operator++(int) // it++,后缀递增运算符
	{
		iterator tmp = *this;//先存住当前迭代器
		pt = pt->next;
		return tmp;
	}
	iterator operator++() //++it,前缀递增运算符
	{
		pt = pt->next;
		return *this;
	}
	//重载==
	bool operator==(const iterator & it)
	{
		if (it->item == pt->item)
			return true;
		return false;
	}
	//重载!=
	bool operator!=(const iterator & it)
	{
		if (it->item == pt->item)
			return false;
		return true;
	}
};

其中重载++运算符的部分是:

//重载++运算符
iterator operator++(int) // it++,后缀递增运算符
{
	iterator tmp = *this;//先存住当前迭代器
	pt = pt->next;
	return tmp;
}
iterator operator++() //++it,前缀递增运算符
{
	pt = pt->next;
	return *this;
}

可以看到,前缀++少了一句代码,因为返回的是递增之后的自己嘛,所以无需保存递增前的自己。而后缀++返回的是递增前的自己,但是递增会改变自己,所以必须要先保存好自己才能递增,然后载返回递增前的自己。。。总之,就多一句代码,就是有效率的差别。这就是从底层代码扣区别的示例之一了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值