今天看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当作的返回值
而前置式为先做自增自减运算,所以只需要对本身进行操作然后返回。
由于后置式多出了这一步,所以效率低。

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

被折叠的 条评论
为什么被折叠?



