11.20软件设计实验二

发布时间 2023-11-20 09:04:32作者: warriorschampionship

实验18:迭代器模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解迭代器模式的动机,掌握该模式的结构;

2、能够利用迭代器模式解决实际问题。

 

[实验任务一]JAVAC++常见数据结构迭代器的使用

1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。

实验要求:

1. 搜集并掌握JAVAC++中常见的数据结构和迭代器的使用方法,例如,vector, list, mapset等;

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. 注意编程规范。