迭代器 学生信息
#include <iostream> #include<string>#include <sstream>#include <vector> usingnamespacestd;
/* object可以是任意类型的变量 */typedefint object;
class Iterator
{public:
virtual object begin() = 0;
virtual void next() = 0;
virtual object end() = 0;
virtual object current() = 0;
virtual bool IsDone() = 0;
};
class ConcreteAggregate
{private:
vector<object> _objects;
public:
void AddObject(object obj)
{
_objects.push_back(obj);
}
object& operator[](int index)
{
return _objects[index];
}
int size()
{
return _objects.size();
}
};
class ConcreteIterator :public Iterator
{
public:
ConcreteAggregate* agg;
int _index;
public:
ConcreteIterator(ConcreteAggregate* agg)
{
this->agg = agg;
_index = 0;
}
virtual object begin()
{
return (*agg)[0];
}
virtual void next()
{
_index++;
}
virtual void preious()
{
_index--;
}
virtual object end()
{
_index = agg->size();
return (*agg)[_index - 1];
}
virtual object current()
{
return (*agg)[_index];
}
virtual bool IsDone()
{
return (_index == agg->size());
}
virtual bool IsFirst()
{
return (_index == 0);
}
};
int main()
{
ConcreteAggregate* objects = new ConcreteAggregate();
cout << "信1305班同学:" << endl;
for (int i = 1; i <= 44; i++) {
int m = 20130000 + i;
objects->AddObject(m);
}
ConcreteIterator* iter = new ConcreteIterator(objects);
ConcreteIterator* iter1 = new ConcreteIterator(objects);
object tmp_begin = iter->begin();
cout << "从小到大输出:" << endl;
while (!iter->IsDone())
{
cout << iter->current() << endl;
iter->next();
}
cout << endl;
object tmp_begin1 = iter1->end();
cout << "从大到小输出:" << endl;
while (!iter1->IsFirst())
{
iter1->preious();
cout << iter1->current() << endl;
}
cout << endl;
delete objects;
delete iter;
system("pause");
return0;
}
usingnamespacestd; /* object可以是任意类型的变量 */typedefint object; class Iterator {public: virtual object begin() = 0; virtual void next() = 0; virtual object end() = 0; virtual object current() = 0; virtual bool IsDone() = 0; }; class ConcreteAggregate {private: vector<object> _objects; public: void AddObject(object obj) { _objects.push_back(obj); } object& operator[](int index) { return _objects[index]; } int size() { return _objects.size(); } }; class ConcreteIterator :public Iterator { public: ConcreteAggregate* agg; int _index; public: ConcreteIterator(ConcreteAggregate* agg) { this->agg = agg; _index = 0; } virtual object begin() { return (*agg)[0]; } virtual void next() { _index++; } virtual void preious() { _index--; } virtual object end() { _index = agg->size(); return (*agg)[_index - 1]; } virtual object current() { return (*agg)[_index]; } virtual bool IsDone() { return (_index == agg->size()); } virtual bool IsFirst() { return (_index == 0); } }; int main() { ConcreteAggregate* objects = new ConcreteAggregate(); cout << "信1305班同学:" << endl; for (int i = 1; i <= 44; i++) { int m = 20130000 + i; objects->AddObject(m); } ConcreteIterator* iter = new ConcreteIterator(objects); ConcreteIterator* iter1 = new ConcreteIterator(objects); object tmp_begin = iter->begin(); cout << "从小到大输出:" << endl; while (!iter->IsDone()) { cout << iter->current() << endl; iter->next(); } cout << endl; object tmp_begin1 = iter1->end(); cout << "从大到小输出:" << endl; while (!iter1->IsFirst()) { iter1->preious(); cout << iter1->current() << endl; } cout << endl; delete objects; delete iter; system("pause"); return0; }