zoukankan      html  css  js  c++  java
  • 2021.11.21(迭代器模式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;
    }
    

      

    实现截图如下:

  • 相关阅读:
    CentOS 如何将.deb 文件 转换.rpm
    zabbix 使用SNMP监控富士施乐打印机
    zabbix5.0安装centos7环境
    zabbix5.0安装centos8
    iptables 扩展模式
    -bash: mail: command not found
    笔记本安装Centos8
    Centos 8 安装
    zabbix5.4部署
    死循环判断进程是否存活脚本
  • 原文地址:https://www.cnblogs.com/marr/p/15585634.html
Copyright © 2011-2022 走看看