10月22日

[实验任务一]JAVAC++常见数据结构迭代器的使用

信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.运行截图:

 

 

 

 

 

 

 

 

posted @ 2024-10-22 21:42  序章0  阅读(31)  评论(0)    收藏  举报