栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 迭代器 学习笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 迭代器 学习笔记

在这里我们对迭代器进行一个初步的了解

任何数据结构通过迭代器遍历都是通过同一种方式  不论是链表  二叉树  还是数组等等....

一个小例子 

实现一个针对链表的小迭代器  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;
	}

完整代码如下

#include
using 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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011671.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号