再问迭代器++返回this指针
http://topic.csdn.net/u/20111118/09/a94e8024-0c37-47d6-a738-6e6743b07c56.html?2261
好吧,涎着脸再问,简化,例如一个list的迭代器iterator这样定义自增运算符:
那么当我使用这个迭代器遍历list时,例如:
每次iter++,iter的成员变量pn发生了变化,即指向list的下一个node,但是 iter 的this指针却一直是它本身吧?一直指向list的begin(),这样的话,iter != nlist.end()是否一直不能得到满足,从而不能跳出循环呢?
对比数组的话,例如:
在这个过程中,pa本身每次都发生了变化,所以最后当 pa == &(a[5])就跳出了循环。
但是迭代器那个是怎样使iter == nlist.end()得到实现的呢?
好吧,涎着脸再问,简化,例如一个list的迭代器iterator这样定义自增运算符:
template <class T>
class list<T>::iterator{
public:
list<T>::iterator &operator++() {
pn=pn->next;
return *this;
}
private:
Node<T> *pn; //指向当前节点的指针
};那么当我使用这个迭代器遍历list时,例如:
list nlist;//假设已经初始化
list<int>::iterator iter;
iter=nlist.begin();
while(iter != nlist.end()) {
cout<<*iter<<endl;
iter++;
}
每次iter++,iter的成员变量pn发生了变化,即指向list的下一个node,但是 iter 的this指针却一直是它本身吧?一直指向list的begin(),这样的话,iter != nlist.end()是否一直不能得到满足,从而不能跳出循环呢?
对比数组的话,例如:
int a[6]={1, 2, 3, 4, 5};
int *pa=a;//视pa为数组的迭代器
while( pa!=&(a[5]) ) {
cout<<*pa<<endl;
pa++;
}
在这个过程中,pa本身每次都发生了变化,所以最后当 pa == &(a[5])就跳出了循环。
但是迭代器那个是怎样使iter == nlist.end()得到实现的呢?
...全文
相关推荐
浅谈c++ stl迭代器失效的问题
下面小编就为大家带来一篇浅谈c++ stl迭代器失效的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦
STL简单迭代器的实现
介绍博客:http://blog.csdn.net/chengonghao/article/details/51360792
详解C++中的vector容器及用迭代器访问vector的方法
使用迭代器iterator可以更方便地解引用和访问成员,当然也包括vector中的元素,本文就来详解C++中的vector容器及用迭代器访问vector的方法,需要的朋友可以参考下
C++_Iterator_迭代器_介绍
C++_Iterator_迭代器_介绍,适合大家学习C++,并让大家更加了解C++迭代器
C++ this 指针的用法及注意
当你进入一个房子后, 你可以看见桌子、椅子、地板等, 但是房子你是看不到全貌了。 对于一个类的实例来说, 你可以看到它的成员函数、成员变量, 但是实例本身呢? this是一个指针,它时时刻刻指向你这个实例本身


