迭代器 学生信息

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

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

posted @ 2021-10-14 15:16  枫叶鎏霜  阅读(28)  评论(0)    收藏  举报