C++ iterator遍历 以前没注意到的一个点 前置递增和后置递增

博客介绍了在使用C++迭代器遍历容器时,前置递增(++pos)与后置递增(pos++)的差异。后置递增需要创建临时对象以保存迭代器原始位置并返回,导致效率较低,而前置递增直接对迭代器自身操作,效率更高。

今天看C++标准库

以前用vector 没有 注意到

书上总结

迭代器的遍历 

	for (vector<int>::iterator pos = m.begin(); pos != m.end(); ++pos)    	                                                 
	{
		cout << *pos;
	}

为什么用++pos而不是pos++

下面  解释了使用前置式递增preincrement的优点,它比后置式递增postincrement效率高。

后者内部需要一个临时对象,因为他必须存放迭代器的原本位置并返回之

_Myiter& operator++()                                //前置++重载
		{	// preincrement
		++*(_Mybase *)this;
		return (*this);
		}

	_Myiter operator++(int)                    //有int参数 后置++重载
		{	// postincrement
		_Myiter _Tmp = *this;
		++*this;
		return (_Tmp);
		}
后置式递增特点,在很多类运算符重载中,都需要为后置++和--在函数中定义一个临时变量,用于保存被更改之前变量的值作为返回值,然后在函数体中队变量进行相应操作。

Object a,b;

b=a++; 直观上来看,在a++中进行赋值操作前不能把a值改变, a的值赋前已经改变,只是b接受的是a改变前的副本temp当作的返回值



而前置式为先做自增自减运算,所以只需要对本身进行操作然后返回。

由于后置式多出了这一步,所以效率低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值