迭代器模式(c++)

今日学习内容:迭代器模式

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

  

实现截图如下:

原文地址:https://www.cnblogs.com/marr/p/15598422.html