[实验任务一]:JAVA和C++常见数据结构迭代器的使用
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
实验要求:
1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;
2. 提交源代码;
3. 注意编程规范。
1.一些常见的数据结构和迭代器的使用方法:
Java中的数据结构和迭代器:
1. Vector
Vector是一个同步的变长数组,可以存储任意类型的对象。
常用方法:add(E e), remove(int index), get(int index), size() 等。
迭代器使用示例:
Vector<Integer> vector = new Vector<>();
vector.add(1);
vector.add(2);
for (int i = 0; i < vector.size(); i++) {
System.out.println(vector.get(i));
}
2. List
List是一个有序集合,可以包含重复的元素。
常用实现类:ArrayList, LinkedList。
迭代器使用示例(使用增强型for循环):
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
for (Integer num : list) {
System.out.println(num);
}
3. Map
Map是一个键值对集合,不允许重复的键。
常用实现类:HashMap, TreeMap。
迭代器使用示例:
Map<Integer, String> map = new HashMap<>();
map.put(1, "One");
map.put(2, "Two");
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
```
4. Set
Set 是一个不允许重复的集合。
常用实现类:HashSet, TreeSet。
迭代器使用示例:
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
for (Integer num : set) {
System.out.println(num);
}
C++中的数据结构和迭代器:
1. vector
std::vector 是一个动态数组,可以存储任意类型的对象。
常用方法:push_back(), erase(), at(), size() 等。
迭代器使用示例:
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << std::endl;
}
return 0;
}
2. list
std::list 是一个双向链表。
常用方法:push_back(), remove(), front(), size() 等。
迭代器使用示例:
#include <list>
#include <iostream>
int main() {
std::list<int> lst;
lst.push_back(1);
lst.push_back(2);
for (std::list<int>::iterator it = lst.begin(); it != lst.end(); ++it) {
std::cout << *it << std::endl;
}
return 0;
}
3. map
std::map 是一个基于红黑树的键值对集合,不允许重复的键。
常用方法:insert(), erase(), find(), size() 等。
迭代器使用示例:
#include <map>
#include <iostream>
int main() {
std::map<int, std::string> mp;
mp[1] = "One";
mp[2] = "Two";
for (std::map<int, std::string>::iterator it = mp.begin(); it != mp.end(); ++it) {
std::cout << it->first << " : " << it->second << std::endl;
}
return 0;
}
4. set
std::set 是一个基于红黑树的集合,不允许重复的元素。
常用方法:insert(), erase(), find(), size() 等。
迭代器使用示例:
#include <set>
#include <iostream>
int main() {
std::set<int> st;
st.insert(1);
st.insert(2);
for (std::set<int>::iterator it = st.begin(); it != st.end(); ++it) {
std::cout << *it << std::endl;
}
return 0;
}
2. 源代码
Java
package test18; import java.util.*; class Student { int id; String name; int age; public Student(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } } package test18; import java.util.*; public class List_Iterator { public static void sortById(List<Student> list) { Iterator<Student> sIterator = list.iterator(); while (sIterator.hasNext()) { Student student = sIterator.next(); System.out.println("学号: " + student.id + ", 姓名: " + student.name + ", 年龄: " + student.age); } } public static void main(String[] args) { List<Student> studentList = new ArrayList<>(); studentList.add(new Student(20220001, "张三", 20)); studentList.add(new Student(20220002, "李四", 21)); studentList.add(new Student(20220003, "王五", 22)); studentList.add(new Student(20220004, "赵六", 23)); studentList.add(new Student(20220005, "周七", 19)); studentList.add(new Student(20220006, "吴八", 20)); studentList.add(new Student(20220007, "郑九", 21)); studentList.add(new Student(20220008, "王十", 22)); studentList.add(new Student(20220009, "冯十一", 23)); studentList.add(new Student(20220010, "陈十二", 20)); //按学号升序排序 Collections.sort(studentList, Comparator.comparingInt(Student -> Student.id)); //用迭代器打印 System.out.println("按学号升序:"); sortById(studentList); //迭代器打印降序学号 Collections.reverse(studentList); System.out.println("\n按学号降序:"); sortById(studentList); } }
运行截图:

C++
#include <iostream> #include <vector> #include <algorithm> #include <iterator> class Student { public: int id; std::string name; int age; Student(int id, std::string name, int age) : id(id), name(name), age(age) {} }; // 使用迭代器打印学生信息 void sortById(std::vector<Student>& students) { std::cout << "按学号升序:" << std::endl; for (const auto& student : students) { std::cout << "学号: " << student.id << ", 姓名: " << student.name << ", 年龄: " << student.age << std::endl; } } int main() { std::vector<Student> studentList; studentList.emplace_back(20220001, "张三", 20); studentList.emplace_back(20220002, "李四", 21); studentList.emplace_back(20220003, "王五", 22); studentList.emplace_back(20220004, "赵六", 23); studentList.emplace_back(20220005, "周七", 19); studentList.emplace_back(20220006, "吴八", 20); studentList.emplace_back(20220007, "郑九", 21); studentList.emplace_back(20220008, "王十", 22); studentList.emplace_back(20220009, "冯十一", 23); studentList.emplace_back(20220010, "陈十二", 20); // 按学号升序排序 std::sort(studentList.begin(), studentList.end(), [](const Student& a, const Student& b) { return a.id < b.id; }); // 使用迭代器打印 std::cout << "按学号升序:" << std::endl; for (const auto& student : studentList) { std::cout << "学号: " << student.id << ", 姓名: " << student.name << ", 年龄: " << student.age << std::endl; } // 按学号降序排序 std::sort(studentList.begin(), studentList.end(), [](const Student& a, const Student& b) { return a.id > b.id; }); // 迭代器打印降序学号 std::cout << "\n按学号降序:" << std::endl; for (const auto& student : studentList) { std::cout << "学号: " << student.id << ", 姓名: " << student.name << ", 年龄: " << student.age << std::endl; } return 0; }
运行截图:


浙公网安备 33010602011771号