实验18:迭代器模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解迭代器模式的动机,掌握该模式的结构;
2、能够利用迭代器模式解决实际问题。
[实验任务一]:JAVA和C++常见数据结构迭代器的使用
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
实验要求:
1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;
2. 提交源代码;
3. 注意编程规范。
1. 在Java中,可以使用Iterator接口来实现迭代器模式。对于ArrayList、LinkedList等集合类,可以直接使用iterator()方法获取迭代器。
在C++中,可以使用STL(Standard Template Library)中的迭代器来遍历容器,如std::vector、std::list等。
2. (1)JAVA
import java.util.*;
class Student {
String name;
String id;
int age;
public Student(String name, String id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", age=" + age +
'}';
}
}
public class IteratorExample {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("Alice", "001", 20));
students.add(new Student("Bob", "002", 22));
students.add(new Student("Charlie", "003", 21));
// 正序遍历
System.out.println("正序遍历:");
for (Student student : students) {
System.out.println(student);
}
// 反序遍历
System.out.println("反序遍历:");
for (int i = students.size() - 1; i >= 0; i--) {
System.out.println(students.get(i));
}
// 使用迭代器遍历
System.out.println("使用迭代器遍历:");
Iterator<Student> iterator = students.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
(2)C++
#include <iostream>
#include <vector>
#include <algorithm>
class Student {
public:
std::string name;
std::string id;
int age;
Student(std::string name, std::string id, int age) : name(name), id(id), age(age) {}
friend std::ostream& operator<<(std::ostream& os, const Student& student) {
os << "Student{" <<
"name='" << student.name << '\'' <<
", id='" << student.id << '\'' <<
", age=" << student.age <<
'}';
return os;
}
};
int main() {
std::vector<Student> students;
students.emplace_back("Alice", "001", 20);
students.emplace_back("Bob", "002", 22);
students.emplace_back("Charlie", "003", 21);
// 正序遍历
std::cout << "正序遍历:" << std::endl;
for (const auto& student : students) {
std::cout << student << std::endl;
}
// 反序遍历
std::cout << "反序遍历:" << std::endl;
for (auto it = students.rbegin(); it != students.rend(); ++it) {
std::cout << *it << std::endl;
}
// 使用迭代器遍历
std::cout << "使用迭代器遍历:" << std::endl;
for (auto it = students.begin(); it != students.end(); ++it) {
std::cout << *it << std::endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用