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

来源:互联网 发布:软件企业资质 编辑:程序博客网 时间:2024/05/17 03:10

今天看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当作的返回值



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

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

阅读全文
0 0
原创粉丝点击