实验18:迭代器模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解迭代器模式的动机,掌握该模式的结构;
2、能够利用迭代器模式解决实际问题。
[实验任务一]:JAVA和C++常见数据结构迭代器的使用
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
实验要求:
1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;
2. 提交源代码;
#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;
for (int i = 1; i <= 44; i++)
{
int m = 20130000 + i;
objects->AddObject(m);
m = 0;
}
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;
}
3. 注意编程规范。