用代码和UML图化解设计模式之《迭代器模式》

这个模式在stl中是非常之常见,因为迭代器进行元素输出的时候基本都是用这个。。。。。不多说上图

 

 

自己实现一个简单的栈,内部友元类是iterator

 迭代器初始化mystack;

 

// Iterator.cpp : 定义控制台应用程序的入口点。
//************************************************************************/    
/* @filename    Iterator.cpp
@author       wallwind  
@createtime    2012/10/30 23:58
@function     迭代器模式
@email       wochenglin@qq.com  
*/    
/************************************************************************/

#include "stdafx.h"
#include <iostream>

using namespace std;
enum{MAXSIZE =100,};
//class Iterator;
class MyStackIterator;
class MyStack
{
public:
	MyStack()
	{
		m_top =0;
	};
	~MyStack()
	{
		delete[] m_stack;
	};

	void push(int x)
	{
		if(m_top>MAXSIZE)
		{
			return ;
		}

		m_stack[m_top++] = x;
	}
	

	int pop()
	{
		if(m_top<0)
		{
			return -1;
		}
		return m_stack[--m_top];
	}

 friend class MyStackIterator;

private:
	int m_top;
	int m_stack[MAXSIZE];

};


class Iterator
{
public:
	Iterator(){};
	virtual ~Iterator(){};
		
		
		virtual void Next()=0;
		virtual int operator++() = 0;
		virtual bool isEnd() = 0;
		virtual int currData() = 0;

};

class MyStackIterator : public Iterator
{
public:
	MyStackIterator(MyStack* stack)
		:m_myStack(stack)
	{
		m_index = 0;
	}
	~MyStackIterator()
	{
		if (m_myStack!=NULL)
		{
			delete m_myStack;
		}
	}
	
	virtual int operator++()
	{
		if (m_index<m_myStack->m_top)
		{
			return m_myStack->m_stack[m_index++];
		}
	}
	

	virtual void Next()
	{
		if (m_index<m_myStack->m_top)
		{
			m_index++;
		}
	}
	virtual bool isEnd()
	{
		return m_index <= m_myStack->m_top;
	}
	virtual int currData()
	{
		return m_myStack->m_stack[m_index];
	}
	


private:
	MyStack * m_myStack;
	int m_index;
};



int _tmain(int argc, _TCHAR* argv[])
{
	MyStack *mystak = new MyStack();
	for (int i = 0; i<6;i++)
	{
		mystak->push(i);
	}

	MyStackIterator *myit = new MyStackIterator(mystak);
	/**
	cout<<(*myit)++<<endl;
	myit->Next();
	cout<<myit->currData()<<endl;
**/
 while (myit->isEnd())
 {
  cout<<myit->currData()<<endl;
  myit->Next();
 }
	return 0;
}


输出的结果

 

 迭代器的模式非常好玩。。。

更多文章,欢迎访问:http://blog.csdn.net/wallwind

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值