10月22日
[实验任务一]:JAVA和C++常见数据结构迭代器的使用
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
实验要求:
1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;
2. 提交源代码;
3. 注意编程规范。
实验内容:
1. Java中的数据结构和迭代器
1.Vector
Vector是Java早期版本中的动态数组,它继承自ArrayList,但在多线程环境下,它的方法是同步的。
用法示例:
Vector<String> vector = new Vector<>();
vector.add("Element");
vector.get(0);
2.List
List接口是Java集合框架的一部分,常用的实现类有ArrayList和LinkedList。
用法示例:
List<String> list = new ArrayList<>();
list.add("Element");
list.get(0);
for (String item : list) {
System.out.println(item);
}
3.Map
Map接口用于存储键值对,常用的实现类有HashMap和TreeMap。
用法示例:
Map<String, Integer> map = new HashMap<>();
map.put("Key", 1);
map.get("Key");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
4.Set
Set接口用于存储不重复的元素,常用的实现类有HashSet和TreeSet。
用法示例:
Set<String> set = new HashSet<>();
set.add("Element");
set.contains("Element");
for (String item : set) {
System.out.println(item);
}
C++中的数据结构和迭代器
1.vector
std::vector是C++标准模板库(STL)中的动态数组。
用法示例:
std::vector<int> vec;
vec.push_back(10);
vec.at(0);
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
2.list
std::list是STL中的双向链表。
用法示例:
std::list<int> lst;
lst.push_back(10);
lst.front();
for (auto it = lst.begin(); it != lst.end(); ++it) {
std::cout << *it << " ";
}
3.map
std::map是STL中的键值对集合,基于红黑树实现。
用法示例:
std::map<std::string, int> mp;
mp["key"] = 10;
for (auto it = mp.begin(); it != mp.end(); ++it) {
std::cout << it->first << " : " << it->second << std::endl;
}
4.set
std::set是STL中的集合,基于红黑树实现,不包含重复元素。
用法示例:
std::set<int> st;
st.insert(10);
for (auto it = st.begin(); it != st.end(); ++it) {
std::cout << *it << " ";
}
2.源代码:
Java运行代码(用8人信息假设为44人信息):
package org.example;
import java.util.*;
// 学生类
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name
+ '\'' +
", id=" + id +
", age=" + age
+
'}';
}
}
public class StudentInfoTraversal {
public static void main(String[]
args) {
List<Student> students =
new ArrayList<>();
// 假设这里有44名学生的信息
students.add(new Student("陈一", 1, 20));
students.add(new Student("陈二", 2, 21));
students.add(new Student("陈三", 3, 21));
students.add(new Student("陈四", 4, 21));
students.add(new Student("陈五", 5, 21));
students.add(new Student("陈六", 6, 21));
students.add(new Student("陈七", 7, 21));
students.add(new Student("陈八", 8, 21));
// 按学号从小到大排序
Collections.sort(students, new
Comparator<Student>() {
@Override
public int compare(Student s1, Student
s2) {
return
Integer.compare(s1.id, s2.id);
}
});
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
Integer.compare(s2.id, s1.id);
}
});
System.out.println("按学号从大到小排序:");
for (Student student : students)
{
System.out.println(student);
}
}
}
c++代码(用8人信息假设为44人信息):
#include <iostream>
#include <vector>
#include <algorithm>
// 学生类
class Student {
public:
std::string name;
int id;
int age;
Student(std::string name, int 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;
}
};
bool compareById(const Student& s1, const Student& s2) {
return s1.id < s2.id;
}
bool compareById1(const Student& s1, const Student& s2) {
return s1.id > s2.id;
}
int main() {
std::vector<Student> students;
// 假设这里有44名学生的信息
students.push_back(Student("陈一", 1, 20));
students.push_back(Student("陈二", 2, 21));
students.push_back(Student("陈三", 3, 21));
students.push_back(Student("陈四", 4, 21));
students.push_back(Student("陈五", 5, 21));
students.push_back(Student("陈六", 6, 21));
students.push_back(Student("陈七", 7, 21));
students.push_back(Student("陈八", 8, 21));
// 按学号从小到大排序
std::sort(students.begin(), students.end(),compareById);
std::cout << "按学号从小到大排序:" << std::endl;
for (std::vector<Student>::iterator it = students.begin(); it != students.end(); ++it) {
std::cout << *it << std::endl;
}
std::cout << std::endl;
// 按学号从大到小排序
std::sort(students.begin(), students.end(),compareById1);
std::cout << "按学号从大到小排序:" << std::endl;
for (std::vector<Student>::iterator it = students.begin(); it != students.end(); ++it) {
std::cout << *it << std::endl;
}
return 0;
}
3.运行截图:



浙公网安备 33010602011771号