每日博客

迭代器模式

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

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

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

 

 

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

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

#include<stdlib.h>
#include<string>
#include<iostream>
#include<iomanip>
using namespace std;

#define MAXSIZE 100
#define OVERFLOW -2
#define ERROR -1
#define OK 1

typedef int Status;

typedef struct {
string Name; // 姓名
string Num; // 学号
int Age; // 年龄
}StudentList;

typedef StudentList Elemtype;

typedef struct {
Elemtype* elem;
int length; // 顺序表长度
}SqList;

// 重载输入运算符
istream& operator >>(istream& in, Elemtype& Stu)
{
cout << "姓名:";
in >> Stu.Name;
cout << "学号:";
in >> Stu.Num;
cout << "年龄:";
in >> Stu.Age;
return in;
}

// 重载输出运算符
ostream& operator <<(ostream& out, Elemtype& Stu)
{
out << Stu.Name << Stu.Num << Stu.Age << endl;
return out;
}


// 初始化顺序表
Status InitList_Sq(SqList& L)
{
L.elem = new Elemtype[MAXSIZE];
if (!L.elem) exit(OVERFLOW);
L.length = 0;
return OK;
}

// 创建顺序表
Status CreateList(SqList& L, int length)
{
// cout << "请输入顺序表的元素:";
int i;
if (length < 0) return ERROR;
if (length >= MAXSIZE) return OVERFLOW;
for (i = 1; i < length + 1; i++)
{
cout << "请输入第" << i << "个学生的信息:" << endl;
cin >> L.elem[i - 1];
}
L.length = length;
return OK;
}

// 输出顺序表
void PrintList(SqList L)
{
int i;
cout << setw(10) << "姓名" << setw(10) << "学号" << setw(10)
<< "年龄" << endl;
for (i = 0; i < L.length; i++)
cout << setw(10) << L.elem[i].Name << setw(10) << L.elem[i].Num << setw(10) << L.elem[i].Age << endl;
cout << endl;
}

// 按学号排序从小到大
void SequenceList(SqList& L)
{
Elemtype Temp;
for (int i = 0; i < L.length - 1; i++)
{
for (int j = 0; j < L.length - 1; j++)
if (L.elem[j].Num > L.elem[j + 1].Num)
{
Temp = L.elem[j];
L.elem[j] = L.elem[j + 1];
L.elem[j + 1] = Temp;
}
}
cout << "按学号排序从小到大" << endl;
}

// 按学号排序从大到小
void SequenceL(SqList& L)
{
Elemtype Temp;
for (int i = 0; i < L.length - 1; i++)
{
for (int j = 0; j < L.length - 1; j++)
if (L.elem[j].Num < L.elem[j + 1].Num)
{
Temp = L.elem[j];
L.elem[j] = L.elem[j + 1];
L.elem[j + 1] = Temp;
}
}
cout << "按学号排序从大到小" << endl;
}

int main()
{
SqList L;
int p = 0, i = 0;
// int n, i;
int Length;
Elemtype e;
cout << "请输入人数:";
cin >> Length;
InitList_Sq(L);
CreateList(L, Length);
SequenceList(L);
PrintList(L);
cout << endl;
SequenceL(L);
PrintList(L);
cout << endl;
return 0;
}

posted @ 2021-11-01 19:04  谦寻  阅读(65)  评论(0编辑  收藏  举报