您当前的位置: 首页 > 

phymat.nico

暂无认证

  • 3浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

设计模式-行为-迭代器

phymat.nico 发布时间:2017-10-07 20:21:40 ,浏览量:3

#pragma once

#ifndef ITERATOR_H 

#define ITERATOR_H 

#include 
#include 
using namespace std;

class Iterater; 

// 容器的抽象基类
template  class Aggregate 
{ 
public: 
	virtual ~Aggregate(){} 
	virtual int GetSize() = 0; 
	virtual DATA GetItem(int nIndex) = 0; 
}; 

// 迭代器的抽象基类 
class Iterater 
{ 
public: 
	virtual ~Iterater(){} 
	virtual Iterater& operator++() = 0;
	virtual Iterater& operator++(int) = 0;
private: 
}; 

// 一个具体的容器类,这里是用数组表示
template  class ConcreateIterater;

template  class ConcreateAggregate : public Aggregate 
{ 
public: 
	ConcreateAggregate(); 
	virtual ~ConcreateAggregate(); 
	virtual ConcreateIterater& begin();
	virtual ConcreateIterater& end();
	virtual void push_back(DATA dt);
	virtual DATA pop_back();
	virtual int GetSize();
	virtual DATA GetItem(int nIndex);
	DATA operator[](size_t nIndex)
	{
		if (nIndex >= m_aData.size())
		{
			coutm_nIndex == itr.m_nIndex;
	}
	bool operator!=(ConcreateIterater itr)
	{
		return this->m_nIndex != itr.m_nIndex;
	}

	template  friend class ConcreateAggregate;
private: 
	Aggregate   *m_pConcreateAggregate; 
	int         m_nIndex; 
}; 

#endif 
#include "StdAfx.h"
#include "iterator_impl.h"

#include  
template 
ConcreateAggregate::ConcreateAggregate()
:m_begin(NULL)
,m_end(NULL)
{
} 
template 
ConcreateAggregate::~ConcreateAggregate() 
{ 
} 
template 
ConcreateIterater& ConcreateAggregate::begin()
{
	if (m_begin == NULL)
	{
		m_begin = new ConcreateIterater(this);
		m_begin->m_nIndex = 0;
	}
	
	return *m_begin;
}
template 
ConcreateIterater& ConcreateAggregate::end()
{
	if (m_end == NULL)
	{
		m_end = new ConcreateIterater(this);
		m_end->m_nIndex = m_aData.size();
	}

	return *m_end;
}
template 
void ConcreateAggregate::push_back(DATA dt)
{
	m_aData.push_back(dt);
}
template 
DATA ConcreateAggregate::pop_back()
{
	DATA tmp = m_aData.back();
	m_aData.pop_back();
	return tmp;
}
template 
int ConcreateAggregate::GetSize() 
{ 
	return m_aData.size(); 
} 
template 
DATA ConcreateAggregate::GetItem(int nIndex) 
{ 
	if (nIndex < m_aData.size()) 
	{ 
		return m_aData[nIndex]; 
	} 
	return -1; 
} 
// Iterator.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "iterator_impl.h"
#include "iterator_impl.cpp"
#include 
#include 
#include 
using namespace std;
//提供一种方法顺序访问一个聚合对象中各个元素,,而又不需暴露该对象的内部表示.
typedef ConcreateAggregate dmVector;
typedef ConcreateAggregate mVector;
typedef ConcreateIterater mIterator;
int _tmain(int argc, _TCHAR* argv[])
{
	mVector vtdata;
	vtdata.push_back(1);
 	vtdata.push_back(2);
 	vtdata.push_back(3);
 	vtdata.push_back(4);
	for (mIterator itr  = vtdata.begin();itr != vtdata.end(); itr++) 
	{ 
		std::cout             
关注
打赏
1659628745
查看更多评论
0.1207s