在这里我们对迭代器进行一个初步的了解
任何数据结构通过迭代器遍历都是通过同一种方式 不论是链表 二叉树 还是数组等等....
一个小例子
实现一个针对链表的小迭代器 Iterator
我们想对链表的遍历符号进行更方便的处理
通过类Iterator 对象ite 对链表进行遍历
我们用这种方式 就要在类内对操作符进行重载
Iterator ite = pHead;
while (ite!=NULL)
{
cout << *ite<< " ";
ite++;
}
其中 Iterator ite = pHead;这一步是可以通过拷贝构造函数实现
ite!=NULL
cout << *ite<< " ";
ite++;
需要对!= * ++ 来进行重载
下面对Iterator ite = pHead;处理
public:
Iterator(Node* pHead)
{
pNode = pHead;
}
之后对一些符号重载
public:
bool operator !=(Node* b)
{
if (b == pNode)
{
return false;
}
else
{
return true;
}
}
int operator *()
{
return pNode->nId;
}
Node* operator ++(int n)
{
Node* p = pNode;
pNode = pNode->pNext;
return p;
}
完整代码如下
#includeusing namespace std; struct Node { int nId; Node* pNext; }; void AddNode(Node*&rpHead,Node*&rpEnd,int n) { Node* pTemp = new Node; pTemp->nId = n; pTemp->pNext = NULL; if (rpHead == NULL) { rpHead = pTemp; } else { rpEnd->pNext = pTemp; } rpEnd = pTemp; } class Iterator { private : Node* pNode; public: Iterator(Node* pHead) { pNode = pHead; } public: bool operator !=(Node* b) { if (b == pNode) { return false; } else { return true; } } int operator *() { return pNode->nId; } Node* operator ++(int n) { Node* p = pNode; pNode = pNode->pNext; return p; } }; int main() { Node* pHead=NULL; Node* pEnd = NULL; AddNode(pHead, pEnd, 1); AddNode(pHead, pEnd, 2); AddNode(pHead, pEnd, 3); AddNode(pHead, pEnd, 4); Node* pMark = pHead; Iterator ite = pHead; while (ite!=NULL) { cout << *ite<< " "; ite++; } cout << endl; return 0; }



