po3a  

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

1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。

实验要求:

1. 搜集并掌握JAVAC++中常见的数据结构和迭代器的使用方法,例如,vector, list, mapset等;

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;
}

运行截图:

 

posted on 2024-11-20 09:21  po3a  阅读(15)  评论(0)    收藏  举报