2023/10/22 每日总结
今天完成了设计模式实验18
实验18:迭代器模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解迭代器模式的动机,掌握该模式的结构;
2、能够利用迭代器模式解决实际问题。
[实验任务一]:JAVA和C++常见数据结构迭代器的使用
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
实验要求:
1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;
Java
package org.test18; public class Student { String name; int id; int age; public Student(String name, int id, int age) { this.name = name; this.id = id; this.age = age; } } package org.test18; 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("zhangsan", 20210001, 20)); students.add(new Student("lisi", 20210002, 22)); students.add(new Student("wangwu", 20210003, 21)); students.add(new Student("zhaoliu", 20210004, 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.push_back(Student("zhangsan", 20210001, 20)); students.push_back(Student("lisi", 20210002, 22)); students.push_back(Student("wangwu", 20210003, 18)); students.push_back(Student("zhaoliu", 20210004, 24)); // 添加更多学生信息... // 按照学号从小到大排序 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; }