11.21每日总结
今天进行了软件设计模式的实验
实验18:迭代器模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解迭代器模式的动机,掌握该模式的结构;
2、能够利用迭代器模式解决实际问题。
[实验任务一]:JAVA和C++常见数据结构迭代器的使用
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
实验要求:
1. 搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如,vector, list, map和set等;
2. 提交源代码;
3. 注意编程规范。
1、Vector(Java)/vector(C++):
特点:动态数组,可以自动调整大小。
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;
// 处理元素
}
2、List(Java)/list(C++):
特点:双向链表,可以高效地插入和删除元素。
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;
// 处理元素
}
3、Map(Java)/map(C++):
特点:键值对的集合,根据键快速查找值。
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;
// 处理键值对
}
4、Set(Java)/set(C++):
特点:无重复元素的集合,可以快速查找元素。
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;
// 处理元素
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #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(); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix