Java/C++实现迭代器模式---学生信息
信1305班共44名同学,每名同学都有姓名,学号和年龄等属性,分别使用JAVA内置迭代器和C++中标准模板库(STL)实现对同学信息的遍历,要求按照学号从小到大和从大到小两种次序输出学生信息。
Java代码:
public class Student implements Comparable<Student>{
private int studentid;
private String name;
private int age;
private String major;
public Student(int studentid, String name, int age, String major) {
super();
this.studentid = studentid;
this.name = name;
this.age = age;
this.major = major;
}
// 三个返回结果都要写出来
public int compareTo(Student o) {
if(this.studentid > o.studentid){
return -1;
}else if(this.studentid < o.studentid){
return 1;
}else {
return 0;
}
}
@Override
public String toString(){
return "姓名: " + this.name + ". 学号: " + this.studentid + ". 年龄: " + this.age
+ ". 专业: " + this.major;
}
}
public class Student2 implements Comparable<Student2>{
private int studentid;
private String name;
private int age;
private String major;
public Student2(int studentid, String name, int age, String major) {
super();
this.studentid = studentid;
this.name = name;
this.age = age;
this.major = major;
}
// 三个返回结果都要写出来
public int compareTo(Student2 o) {
if(this.studentid < o.studentid){
return -1;
}else if(this.studentid > o.studentid){
return 1;
}else {
return 0;
}
}
@Override
public String toString(){
return "姓名: " + this.name + ". 学号: " + this.studentid + ". 年龄: " + this.age
+ ". 专业: " + this.major;
}
}
public class Client {
public static void main(String[] args) {
Student s1 = new Student(20193250, "张雨轩", 19, "软件工程专业");
Student s2 = new Student(20193999, "李四", 30, "材料专业");
Student s3 = new Student(20196654, "王五", 29, "机械专业");
Student s4 = new Student(20193367, "赵六", 34, "工商管理专业");
Student s5 = new Student(20193396, "张三", 34, "土木专业");
Student s6 = new Student(20193396, "孙七", 34, "电气专业");
Student2 s7 = new Student2(20193250, "张雨轩", 19, "软件工程专业");
Student2 s8 = new Student2(20193999, "李四", 30, "材料专业");
Student2 s9 = new Student2(20196654, "王五", 29, "机械专业");
Student2 s10 = new Student2(20193367, "赵六", 34, "工商管理专业");
Student2 s11 = new Student2(20193396, "张三", 34, "土木专业");
Student2 s12 = new Student2(20193396, "孙七", 34, "电气专业");
List<Student> list = new ArrayList<Student>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
list.add(s6);
Collections.sort(list);
System.out.println("按照学号从大到小输出: ");
for(Student stu : list){
System.out.println(stu.toString());
}
System.out.println("-----------------------------------------------------------------");
List<Student2> list2 = new ArrayList<Student2>();
list2.add(s7);
list2.add(s8);
list2.add(s9);
list2.add(s10);
list2.add(s11);
list2.add(s12);
Collections.sort(list2);
System.out.println("按照学号从小到大输出: ");
for(Student2 stu : list2){
System.out.println(stu.toString());
}
}
}
C++代码:
#include<iostream>
#include <vector>
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<<". 学号: "<<this->studentid <<". 年龄: "<< this->age<< ". 专业: " << 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(20193250, "张雨轩", 19, "软件工程专业");
Student *s2 = new Student(20193999, "李四", 30, "材料专业");
Student *s3 = new Student(20196654, "王五", 29, "机械专业");
Student *s4 = new Student(20193367, "赵六", 34, "工商管理专业");
Student *s5 = new Student(20193396, "张三", 34, "土木专业");
Student *s6 = new Student(20193396, "孙七", 34, "电气专业");
vector<Student*> vec;
vec.push_back(s1);
vec.push_back(s2);
vec.push_back(s3);
vec.push_back(s4);
vec.push_back(s5);
vec.push_back(s6);
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();
}
}
运行结果:


Java/C++实现迭代器模式---学生信息的更多相关文章
- 16.java设计模式之迭代器模式
基本需求: 展示一个学校的结构,比如一个学校下面有多个学院,学院下面有多个系,对其节点主要是遍历,与组合模式略有不同 传统方案: 学校<-学院<-系 依次继承 这种方式,在一个页面中展示出 ...
- 简单的了解下Java设计模式:迭代器模式(转载)
迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. Java 开发过程中遍历是常用的.如下边程序: for(int i =0 ; ...
- 折腾Java设计模式之迭代器模式
迭代器模式 Provide a way to access the elements of an aggregate object sequentially without exposing its ...
- java设计模式之迭代器模式
一.迭代器模式简介 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示. 迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露内部的表示.把游走的任务放在迭代器上,而不是 ...
- jsp和java的结合使用显示学生信息
package com.zyz; public class Student { private String ID; // 学号 private String name; // 姓名 private ...
- 设计模式学习笔记(十六)迭代器模式及其在Java 容器中的应用
迭代器(Iterator)模式,也叫做游标(Cursor)模式.我们知道,在Java 容器中,为了提高容器遍历的方便性,把遍历逻辑从不同类型的集合类中抽取出来,避免向外部暴露集合容器的内部结构. 一. ...
- 设计模式 -- 迭代器模式(Iterator)
--------------------------------------------------------------------- 1.场景问题 考虑这样一个问题: 9个学生对象分别通过数组存 ...
- Java实现功能简单的学生管理系统(附带源代码)
这几天Java学了点新的知识,打算要用这些知识做一个比较简单的管理系统,实战一下子,代码中的功能简洁,可能不多,但是作为一个练手来了解一个项目是怎么样一点一点思考的还是不错的 一.代码中要实现的功能 ...
- 深入理解Java中的迭代器
迭代器模式:就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节. 概述 Java集合框架的集合类,我们有时候称之为容器.容器的种类有很多种,比如ArrayList.Li ...
随机推荐
- 转发有关tomcat和nginx
nginx 与 tomcat 组合搭建web服务 部分内容转自 http://www.cnblogs.com/naaoveGIS/ 1. Web服务 nginx是常用的web服务器,用于获取静态资 ...
- Kubernetes系列(一)Pod
作者: LemonNan 原文地址: https://juejin.im/post/6862733649272537102 简单介绍 Pod 在 kubernetes 中是一个非常重要的基本概念, 别 ...
- vue中使用keepAlice的各种问题
项目需求:从项目列表页index,进入到列表的详情页detail,再从detail返回到index,需要缓存index的数据 在App.vue中的配置 <template> <div ...
- 将su模型导入arcgis,并获取高度信息,多面体转shp文件(ArcMap)
问题:将Sketchup中导出的su模型,导入arcgis并得到面shp文件,进而获取各建筑的高度.面积等信息. 思路: (1)导入arcgis得到多面体 (2)转为面shp文件 (3)计算高度/面积 ...
- 了解Redis持久化
Redis是一个键值对数据库服务器,由于Redis是内存数据库,那么有很多内存的特点,例如掉电易失,或者进程退出,服务器中的数据也将消失不见,所以需要一种方法将数据从内存中写到磁盘,这一过程称之为数据 ...
- 记录一次SQL函数和优化的问题
一.前言 上次在年前快要放假的时候记录的一篇安装SSL证书的内容,因为当时公司开始居家办公了,我也打算回个家 毕竟自己在苏州这半年一个人也是很想家的,所以就打算年过完来重新写博客.不巧的是,当时我2月 ...
- 内网渗透----Linux信息收集整理
一.基础信息收集 1.查看系统类型 cat /etc/issue cat /etc/*-release cat /etc/lsb-release cat /etc/redhat-release 2.内 ...
- 【Vulnhub练习】Billu_b0x
靶机说明 虚拟机难度中等,使用ubuntu(32位),其他软件包有: PHP apache MySQL 目标 Boot to root:从Web应用程序进入虚拟机,并获得root权限. 运行环境 靶机 ...
- Mycat+MySql 主从复制-读写分离 看这一篇就够了
通过mycat和mysql的主从复制配合搭建数据库的读写分离,可以实现mysql的高可用性,下面我们来搭建mysql的读写分离. 1.一主一从 1.在node01上修改/etc/my.cnf的文件 ...
- 『忘了再学』Shell基础 — 3、echo命令的介绍与使用
目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...