11.21每日总结

发布时间 2023-11-21 19:03:37作者: 漏网鲨鱼

今天进行了软件设计模式的实验

 

实验18:迭代器模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解迭代器模式的动机,掌握该模式的结构;

2、能够利用迭代器模式解决实际问题。

 

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

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

实验要求:

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

2. 提交源代码;

3. 注意编程规范。

1VectorJava/vectorC++):

特点:动态数组,可以自动调整大小。

Java使用方式:

import java.util.Vector;

 

Vector<Integer> vector = new Vector<>();

vector.add(1);

vector.add(2);

vector.add(3);

 

// 使用迭代器遍历

Iterator<Integer> iterator = vector.iterator();

while (iterator.hasNext()) {

    int element = iterator.next();

    // 处理元素

}

C++使用方式:

#include <vector>

 

std::vector<int> vec;

vec.push_back(1);

vec.push_back(2);

vec.push_back(3);

 

// 使用迭代器遍历

for (auto it = vec.begin(); it != vec.end(); ++it) {

    int element = *it;

    // 处理元素

}

 

2ListJava/listC++):

特点:双向链表,可以高效地插入和删除元素。

Java使用方式:

import java.util.LinkedList;

LinkedList<String> list = new LinkedList<>();

list.add("A");

list.add("B");

list.add("C");

// 使用迭代器遍历

Iterator<String> iterator = list.iterator();

while (iterator.hasNext()) {

    String element = iterator.next();

    // 处理元素

}

C++使用方式:

#include <list>

std::list<std::string> myList;

myList.push_back("A");

myList.push_back("B");

myList.push_back("C");

// 使用迭代器遍历

for (auto it = myList.begin(); it != myList.end(); ++it) {

    std::string element = *it;

    // 处理元素

}

3MapJava/mapC++):

特点:键值对的集合,根据键快速查找值。

Java使用方式:

import java.util.HashMap;

import java.util.Map;

Map<String, Integer> map = new HashMap<>();

map.put("A", 1);

map.put("B", 2);

map.put("C", 3);

// 使用迭代器遍历

Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();

while (iterator.hasNext()) {

    Map.Entry<String, Integer> entry = iterator.next();

    String key = entry.getKey();

    int value = entry.getValue();

    // 处理键值对

}

C++使用方式:

#include <map>

std::map<std::string, int> myMap;

myMap["A"] = 1;

myMap["B"] = 2;

myMap["C"] = 3;

// 使用迭代器遍历

for (auto it = myMap.begin(); it != myMap.end(); ++it) {

    std::string key = it->first;

    int value = it->second;

    // 处理键值对

}

4SetJava/setC++):

特点:无重复元素的集合,可以快速查找元素。

Java使用方式:

import java.util.HashSet;

import java.util.Set;

Set<String> set = new HashSet<>();

set.add("A");

set.add("B");

set.add("C");

// 使用迭代器遍历

Iterator<String> iterator = set.iterator();

while (iterator.hasNext()) {

    String element = iterator.next();

    // 处理元素

}

C++使用方式:

#include <set>

std::set<std::string> mySet;

mySet.insert("A");

mySet.insert("B");

mySet.insert("C");

// 使用迭代器遍历

for (auto it = mySet.begin(); it != mySet.end(); ++it) {

    std::string element = *it;

    // 处理元素

}

#include<iostream>
#include <vector>
#include<algorithm>
using namespace std;
class Student{
public:
     long studentid;
     string name;
     int age;
     string major;
public:
     Student(long studentid, string name, int age, string major) {
        this->studentid = studentid;
        this->name = name;
        this->age = age;
        this->major = major;
    }
    void show(){
        cout<<"姓名: "<<this->name<<"\t学号: "<<this->studentid <<"\t年龄: "<< this->age<< "\t专业: " << this->major<<endl;
    }
};
bool compMax(Student *a,Student *b){
    if (a->studentid> b->studentid)
         return true;
     else
         return false;
}
bool compMin(Student *a,Student *b){
    if (a->studentid< b->studentid)
         return true;
     else
         return false;
}
int main(){
    Student *s1 = new Student(20213288, "张三", 19, "土木");
    Student *s2 = new Student(20211999, "李四", 21, "经管");
    Student *s3 = new Student(20216654, "王五", 22, "软工");
    Student *s4 = new Student(20213367, "赵六", 20, "机械");
    vector<Student*> vec;
    vec.push_back(s1);
    vec.push_back(s2);
    vec.push_back(s3);
    vec.push_back(s4);
    cout<<"按照学号从大到小输出: "<<endl;
    vector<Student*>::iterator it;
    sort(vec.begin(), vec.end(),compMax);
    for(it=vec.begin();it!=vec.end();it++){
        (*it)->show();
    }
    cout<<"-----------------------------------------------------------------"<<endl;
    cout<<"按照学号从小到大输出: "<<endl;
    sort(vec.begin(), vec.end(),compMin);
    for(it=vec.begin();it!=vec.end();it++){
        (*it)->show();
    }
}