今日学习内容:迭代器模式
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
c++源代码:
#include <iostream> #include<string> #include <sstream> #include <vector> using namespace std; /* object可以是任意类型的变量 */ typedef int 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; object a = 20130001; object b = 20130002; object c = 20130003; object d = 20130004; object e = 20130005; object f = 20130006; object g = 20130007; objects->AddObject(a); objects->AddObject(b); objects->AddObject(c); objects->AddObject(d); objects->AddObject(e); objects->AddObject(f); objects->AddObject(g); 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"); return 0; }
实现截图如下: