迭代器模式

#include <iostream>
#include <string>
//#include <afx.h>
#include <vector>
#include <list>
using namespace std;


class ConcreteAggregate;


class Iterator
{
public:
virtual string First() = 0;
virtual string Next() = 0;
virtual bool IsDone() = 0;
virtual string CurrentItem() = 0;
};


class ConcreteIterator:public Iterator
{
ConcreteAggregate * paggregate;
int current;
public:
ConcreteIterator(ConcreteAggregate * paggregate);
string First();
string Next();
bool IsDone();
string CurrentItem();
};


class Aggregate
{
public:
virtual ConcreteIterator* CreateIterator() = 0;
};


class ConcreteAggregate:public Aggregate
{
public:
vector<string>VI;
public:
ConcreteIterator* CreateIterator();


};


/
ConcreteIterator::ConcreteIterator(ConcreteAggregate * paggregate)
{
current = 0;
this->paggregate = paggregate;
}

string ConcreteIterator::First()
{
return paggregate->VI[0];
}


string ConcreteIterator::Next()
{
string ret;
current ++;
if(current < paggregate->VI.size())
{
ret = paggregate->VI[current];
}
return ret;
}


bool ConcreteIterator::IsDone()
{
return current >= paggregate->VI.size() ? true : false;
}


string ConcreteIterator::CurrentItem()
{
return paggregate->VI[current];
}


ConcreteIterator* ConcreteAggregate::CreateIterator()
{
return new ConcreteIterator(this);
}


int main()
{
ConcreteAggregate a;
a.VI.push_back("A");
a.VI.push_back("B");
a.VI.push_back("C");
a.VI.push_back("D");
a.VI.push_back("E");
a.VI.push_back("F");


ConcreteIterator i(&a);

while(!i.IsDone())
{
cout<<i.CurrentItem()<<"买票\n";
i.Next();
}


cout<<"\nOK\n";
return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值