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