实验18:迭代器模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解迭代器模式的动机,掌握该模式的结构;
2、能够利用迭代器模式解决实际问题。
[实验任务一]:JAVA和C++常见数据结构迭代器的使用
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
实验要求:
1.
搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;
Vector:
java:
import java.util.Vector;
Vector<Integer> vec = new
Vector<Integer>();
vec.add(1);
vec.add(2);
vec.add(3);
// 迭代器使用
for (int i : vec) {
System.out.println(i);
}
c++:
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
// 迭代器使用
for (int i : vec) {
std::cout << i << std::endl;
}
return 0;
}
List:
java:
import java.util.ArrayList;
import java.util.List;
List<Integer> list = new
ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
// 迭代器使用
for (int i : list) {
System.out.println(i);
}
c++:
#include <list>
#include <iostream>
int main() {
std::list<int> list;
list.push_back(1);
list.push_back(2);
list.push_back(3);
// 迭代器使用
for (int i : list) {
std::cout << i << std::endl;
}
return 0;
}
Map:
java:
import java.util.HashMap;
import java.util.Map;
Map<String, Integer> map = new
HashMap<String, Integer>();
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
// 迭代器使用
for (Map.Entry<String, Integer>
entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
c++:
#include <map>
#include <iostream>
int main() {
std::map<std::string, int> map;
map["one"] = 1;
map["two"] = 2;
map["three"] = 3;
// 迭代器使用
for (const auto& pair : map) {
std::cout << pair.first << " : " <<
pair.second << std::endl;
}
return 0;
}
Set:
java:
import java.util.HashSet;
import java.util.Set;
Set<Integer> set = new
HashSet<Integer>();
set.add(1);
set.add(2);
set.add(3);
// 迭代器使用
for (int i : set) {
System.out.println(i);
}
c++:
#include <set>
#include <iostream>
int main() {
std::set<int> set;
set.insert(1);
set.insert(2);
set.insert(3);
// 迭代器使用
for (int i : set) {
std::cout << i << std::endl;
}
return 0;
}
2.
提交源代码;
JAVA:
Student.java
public class Student {
private String
name;
private String
id;
private int age;
public
Student(String name, String id, int age) {
this.name =
name;
this.id = id;
this.age =
age;
}
// Getter和Setter方法
public String
getName() {
return name;
}
public String
getId() {
return id;
}
public int
getAge() {
return age;
}
@Override
public String
toString() {
return
"Student{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", age=" + age +
'}';
}
}
StudentDemo.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class StudentDemo {
public static
void main(String[] args) {
List<Student> students = new ArrayList<>();
// 假设这里添加了44名学生的信息
//
students.add(new Student("李家旭", "20224023", 20));
// 按学号从小到大排序
Collections.sort(students, new Comparator<Student>() {
@Override
public
int compare(Student s1, Student s2) {
return s1.getId().compareTo(s2.getId());
}
});
System.out.println("按学号从小到大排序:");
for (Student
student : students) {
System.out.println(student);
}
// 按学号从大到小排序
Collections.sort(students, new Comparator<Student>() {
@Override
public
int compare(Student s1, Student s2) {
return s2.getId().compareTo(s1.getId());
}
});
System.out.println("\n按学号从大到小排序:");
for (Student
student : students) {
System.out.println(student);
}
}
}
C++
#include <iostream>
#include <string>
#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);
};
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;
// 假设这里添加了44名学生的信息
//
students.push_back(Student("李家旭", "20224023", 20));
// 按学号从小到大排序
std::sort(students.begin(), students.end(), [](const Student& s1,
const Student& s2) {
return s1.id
< s2.id;
});
std::cout
<< "按学号从小到大排序:" << std::endl;
for (const
auto& student : students) {
std::cout
<< student << std::endl;
}
// 按学号从大到小排序
std::sort(students.begin(), students.end(), [](const Student& s1,
const Student& s2) {
return s1.id
> s2.id;
});
std::cout
<< "\n按学号从大到小排序:" << std::endl;
for (const
auto& student : students) {
std::cout
<< student << std::endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律