设计模式--迭代器模式

实验18:迭代器模式

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

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

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

[实验任务]:JAVA和C++常见数据结构迭代器的使用

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

实验要求:

搜集并掌握JAVA和C++中常见的数据结构和迭代器的使用方法,例如vector, list, map和set等;

代码

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

public class List_Iterator
{
    public static void sortById(List 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(20213971, "门殿宇", 20));
        studentList.add(new Student(20211234, "张三", 20));
        studentList.add(new Student(20214352, "李四", 20));
        studentList.add(new Student(20210123, "王五", 20));
        studentList.add(new Student(20214444, "小明", 20));
        studentList.add(new Student(20215423, "小李", 20));
        studentList.add(new Student(20217462, "小王", 20));
        studentList.add(new Student(20212344, "小张", 20));
        studentList.add(new Student(20213888, "小刘", 20));
        studentList.add(new Student(20219999, "小马", 20));


        //按学号升序排序
        Collections.sort(studentList, Comparator.comparingInt(student -> student.id));

        //用迭代器打印
        System.out.println("按学号升序:");
        sortById(studentList);


        Collections.reverse(studentList);
        //迭代器打印降序学号
        System.out.println("\n按学号降序:");
        sortById(studentList);
    }
}
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

// 自定义数据类型
class Student
{
public:
    int id;
    string name;
    int age;

public:
    Student(int id, string name, int age) : id(id), name(name), age(age)
    {}
};

// 比较函数,按学号升序排序
bool compareByIdUp(const Student &a, const Student &b)
{
    return a.id < b.id;
}

//按学号降序排序
bool compareByIdDown(const Student &a, const Student &b)
{
    return a.id > b.id;
}

// 打印学生信息
void printStudentInfo(vector<Student> &v)
{
    for (vector<Student>::iterator it = v.begin(); it != v.end(); it++)
    {
        cout << "学号:" << (*it).id << "  姓名:" << (*it).name << "  年龄:" << (*it).age << endl;
    }
    cout << endl;
}

int main()
{
    vector<Student> students;
    students.emplace_back(20213971, "门殿宇", 20);
    students.emplace_back(20211234, "张三", 20);
    students.emplace_back(20214352, "李四", 20);
    students.emplace_back(20210123, "王五", 20);
    students.emplace_back(20214444, "小明", 20);
    students.emplace_back(20215423, "小李", 20);
    students.emplace_back(20217462, "小王", 20);
    students.emplace_back(20212344, "小张", 20);
    students.emplace_back(20213888, "小刘", 20);
    students.emplace_back(20219999, "小马", 20);

    // 使用 sort 函数和比较函数按学号升序排序
    sort(students.begin(), students.end(), compareByIdUp);

    cout << "按学号升序排列" << endl;
    // 打印排序后的学生信息
    printStudentInfo(students);


    // 使用 sort 函数和比较函数按学号降序排序
    sort(students.begin(), students.end(), compareByIdDown);

    cout << "按学号降序排列" << endl;
    // 打印排序后的学生信息
    printStudentInfo(students);

    return 0;
}

 运行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/268348.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch随机数生成:torch.rand,torch.randn,torch.randind,torch.rand_like

在用PyTorch做深度学习开发过程中&#xff0c;时常用到随机数生成功能&#xff0c;但经常记不住几个随机数生成函数的用法&#xff0c;现在正好有点时间&#xff0c;整理一下。 1. torch.rand() torch.rand(*size, *, generatorNone, outNone, dtypeNone, layouttorch.stride…

我们是如何测试人工智能的(一)基础效果篇(内含大模型的测试内容)

来源&#xff5c;TesterHome社区 作者&#xff5c;孙高飞 前言 这个系列算是科普文吧&#xff0c;尤其这第一篇可能会比较长&#xff0c;因为我这8年里一直在 AI 领域里做测试&#xff0c;涉及到的场景有些多&#xff0c;我希望能尽量把我经历过的东西都介绍一下&#xff0c;…

<JavaEE> 协议格式 -- 传输层协议 UDP

目录 一、UDP协议格式长啥样&#xff1f; 二、端口号和IP地址 1&#xff09;UDP协议中包含哪两个端口号&#xff1f; 2&#xff09;有没有包含IP地址&#xff1f; 三、UDP报文长度 1&#xff09;UDP报文长度最长多长&#xff1f; 2&#xff09;UDP报文的组成&#xff1f…

Socket地址

socket地址其实是一个结构体&#xff0c;封装端口号和IP等信息 。后面的 socket 相关的 api 中需要使用到这个socket地址。 客户端 -> 服务器需要知道服务器的&#xff08; IP, Port &#xff09; 一、通用 socket 地址 socket 网络编程接口中表示 socket 地址的是结构体…

linux cpu调度分析

一、cpu调度调试方法 echo 0 > /sys/kernel/debug/tracing/tracing_on echo > /sys/kernel/debug/tracing/trace echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb echo nop > /sys/kernel/debug/tracing/current_tracer echo sched_switch sched_wakeup s…

MYSQL函数\约束\多表查询\事务

函数 字符串函数 数值函数 mod就是取余 日期函数 流程函数 约束 外键约束 删除更新\外键 多表查询 多表关系 一对多 多对多 一对一 多表查询 内连接 select e.name d.name from emp e join dept d on e.id d.id; 外连接 select emp.*, d.name from emp left join tm…

计算机网络(4):网络层

网络层提供的两种服务 虚电路服务&#xff08;Virtual Circuit Service&#xff09;和数据报服务&#xff08;Datagram Service&#xff09;是在网络层&#xff08;第三层&#xff09;提供的两种不同的通信服务。它们主要区别在于建立连接的方式和数据传输的方式。 虚电路服务…

初识QT(上篇):What Qt

初识QT&#xff08;上篇&#xff09;&#xff1a;What Qt 前言 & 说明前言说明 初识QT1.1 QT的what1. 介绍2. 发展历程3. QT架构的主要内容4.QT的常用模块 1.2 QT的 why1. QT的核心机制 下篇笔记链接 前言 & 说明 前言 前言&#xff1a; 之前说要share的qt相关知识&am…

看图学源码之FutureTask

RunnableFuture 源码学习&#xff1a; 成员变量 任务的运行状态的转化 package java.util.concurrent; import java.util.concurrent.locks.LockSupport;/**可取消的异步计算。该类提供了Future的基本实现&#xff0c;包括启动和取消计算的方法&#xff0c;查询计算是否完成以…

基于flask和echarts的新冠疫情实时监控系统源码+数据库,后端基于python的flask框架,前端主要是echarts

介绍 基于flask和echarts的新冠疫情实时监控系统 软件架构 后端基于python的flask框架&#xff0c;前端主要是echarts 安装教程 下载到本地&#xff0c;在python相应环境下运行app.py,flask项目部署请自行完成 使用说明 flaskProject文件夹中 app.py是flask项目主运行文…

Unity2017升级到Unity2018在Window7上输出空异常错误问题

Unity2017升级到Unity2018在Window7上输出空异常错误问题 一、环境Window7二、现象Unity报空异常&#xff08;.NET 4.x Equivalent&#xff09;三、日志四、解决方案第一种解决方案第二种解决方案 一、环境Window7 二、现象Unity报空异常&#xff08;.NET 4.x Equivalent&…

免费WPML v4.6.6已注册学习版+17插件包

免费WPML v4.6.6已注册学习版17插件包 关于一个名为WPML的WordPress插件的描述。这个插件被用于创建和管理多语言网站&#xff0c;使得网站的内容可以轻松地翻译成多种语言。 以下是这段文本的详细分析&#xff1a; WPML v4.6.6 已注册&#xff1a;这是插件的名称和版本号。表…

HarmonyOS的功能及场景应用

一、基本介绍 鸿蒙HarmonyOS主要应用的设备包括智慧屏、平板、手表、智能音箱、IoT设备等。具体来说&#xff0c;鸿蒙系统是一款面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统&#xff0c;能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备…

黑格尔哲学,从入门到入坟

身体需要锻炼&#xff0c;心灵也需要锻炼。哲学家思考的大致步骤&#xff1a;确立自己哲学的基本原则&#xff0c;在此原则基础上建构哲学体系。 黑格尔建立了哲学史上最庞大最全面的哲学体系。 黑格尔的对手是康德。 黑格尔哲学包括逻辑学、自然哲学、精神哲学。逻辑学&…

Vscode中plot不显示

需要在File->preference->settings中的搜索框中搜索plots&#xff0c;然后将勾选框勾选 然后重启vscode&#xff0c;解决!

操作系统 内存管理篇

一.程序的装入和链接 装入方式&#xff1a; 链接方式&#xff1a; 二.进程的内存映像 三.内存的分配 1.连续分配 分配方式&#xff1a; 2.不连续分配 分页&#xff1a;页面大小一致 引入快表&#xff08;和 cache 处理思路一致&#xff09; 升级到二级页表 分段&#xff1a;…

python pip安装依赖的常用软件源

目录 引言 一、什么是镜像源&#xff1f;​​​​​​​ 二、清华源 三、阿里源 四、中科大源 五、豆瓣源 六、更多资源 引言 在软件开发和使用过程中&#xff0c;我们经常需要下载和更新各种软件包和库文件。然而&#xff0c;由于网络环境的限制或者服务器的负载&#…

树与图的深度优先遍历、宽度优先遍历算法总结

知识概览 树是特殊的图&#xff0c;是无环连通图图分为有向图和无向图。因为无向图可以转化为有向图&#xff0c;树可以转化为图。因此本文讨论有向图。 树和图的存储&#xff1a; 邻接矩阵&#xff1a;空间复杂度&#xff0c;适合存储稠密图。邻接表&#xff1a;存储每个点可以…

04-JVM字节码文件结构深度剖析

一、源代码 package com.tuling.jvm;public class TulingByteCode {private String userName;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;} }二、通过javap -verbose TulingByteCode .class反编译 //…

Springboot+vue的交通管理在线服务系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的交通管理在线服务系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的交通管理在线服务系统&#xff0c;采用M&#xff08;m…