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