12.15

 

实验18:迭代器模式

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

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

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

 

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

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

实验要求:

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

c++中的容器(vectormaplistset)一般会提供四个迭代器:

iterator:正向迭代,从前往后遍历,可修改元素的值

const_iterator:正向常量迭代,但不能修改元素的值,因为指向的是const的引用

reverse_iterator:反向迭代,从后往前遍历,可修改元素的值

const_reverse_iterator:反向常量迭代,但不能修改元素的值,因为指向的是const的引用

Java中的List接口及其实现类可以通过iterator()返回Iterator,或通过listIterator()listIterator(int index) 返回ListIterator

IteratorListIterator都是迭代器,ListIterator继承自IteratorIterator只能对列表进行遍历,且只能从前往后遍历,ListIterator可以修改列表,且可以选择往前或往后遍历

2. 提交源代码;

Java

 

 

 

 

package org.example;

 

        import java.util.ArrayList;

        import java.util.Collections;

        import java.util.Iterator;

 

public class StudentIterator {

    public static void main(String[] args) {

        ArrayList<Student> students = new ArrayList<>();

 

        // 添加学生信息

        students.add(new Student("周易", 20220001, 20));

        students.add(new Student("胡铁丞", 20220002, 22));

        students.add(new Student("归藏", 20224444, 21));

        students.add(new Student("连山", 20220004, 18));

        // 添加更多学生信息...

 

        // 按照学号从小到大排序

        Collections.sort(students, (s1, s2) -> Integer.compare(s1.id, s2.id));

 

        // 使用迭代器遍历学生信息(从小到大)

        Iterator<Student> iterator = students.iterator();

        while (iterator.hasNext()) {

            Student student = iterator.next();

            System.out.println("Name: " + student.name + ", ID: " + student.id + ", Age: " + student.age);

        }

 

        System.out.println();

 

        // 按照学号从大到小排序

        Collections.sort(students, (s1, s2) -> Integer.compare(s2.id, s1.id));

 

        // 使用迭代器遍历学生信息(从大到小)

        iterator = students.iterator();

        while (iterator.hasNext()) {

            Student student = iterator.next();

            System.out.println("Name: " + student.name + ", ID: " + student.id + ", Age: " + student.age);

        }

    }

}

 

C++

#include <iostream>

#include <vector>

#include <algorithm>

 

class Student {

public:

    std::string name;

    int id;

    int age;

 

    Student(std::string n, int i, int a) : name(n), id(i), age(a) {}

};

 

int main() {

    std::vector<Student> students;

 

    // 添加学生信息

     students.add(new Student("周易", 20220001, 20));

        students.add(new Student("胡铁丞", 20210002, 22));

        students.add(new Student("归藏", 20204444, 21));

        students.add(new Student("连山", 20220004, 18));

 

    // 添加更多学生信息...

 

    // 按照学号从小到大排序

    std::sort(students.begin(), students.end(), [](const Student& s1, const Student& s2) {

        return s1.id < s2.id;

    });

 

    // 使用迭代器遍历学生信息(从小到大)

    for (const auto& student : students) {

        std::cout << "Name: " << student.name << ", ID: " << student.id << ", Age: " << student.age << std::endl;

    }

 

    std::cout << std::endl;

 

    // 按照学号从大到小排序

    std::sort(students.begin(), students.end(), [](const Student& s1, const Student& s2) {

        return s1.id > s2.id;

    });

 

    // 使用迭代器遍历学生信息(从大到小)

    for (const auto& student : students) {

        std::cout << "Name: " << student.name << ", ID: " << student.id << ", Age: " << student.age << std::endl;

    }

 

    return 0;

}

 

3. 注意编程规范。

 

 

posted @ 2024-12-15 20:49  混沌武士丞  阅读(13)  评论(0)    收藏  举报