C++ list类存储结构体

C++提供了强大的模板库,list便是其中之一。list是可以存储各种数据类型的链表,以下代码将用list存放结构体


// List_Struct_Study.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <list>
#include <algorithm>
#include <string>
#include <vector>

using namespace std;

typedef struct StudentMark//必须为类型名
{
	string stuName;
	string stuNumber;
	int stuMark;
	bool operator < (const StudentMark& c) const //重载小于运算符
	{
		return(stuMark < c.stuMark);
	}
}StudentInfo;
typedef list <StudentInfo>  StuInfoList;

void ListDisplay(StuInfoList inputList)   //链表显示函数
{
	list<StudentInfo>::iterator i;
	for ( i = inputList.begin(); i != inputList.end(); ++i)
	{
		cout << i->stuName << "\t"
			<< i->stuNumber << "\t"
			<< i->stuMark << endl;
	}
}
void ClassInput(StudentInfo& classTemp)   //结构体输入函数
{
	cin >> classTemp.stuName;
	cin >> classTemp.stuNumber;
	cin >> classTemp.stuMark;
}
void ListClassInput(StuInfoList& classcopy, int amount)//链表输入函数
{
	StudentInfo classtemp;
	for (int i=0; i < amount; ++i)
	{
		ClassInput(classtemp);
		classcopy.push_front(classtemp);
	}
}
void SortAndInsert(StuInfoList& listcopy,const StudentInfo& temp )//排序后有序插入函数
{
	list<StudentInfo>::iterator i;
	int k;
	for (i = listcopy.begin(); i != listcopy.end(); ++i)
	{
		if (temp.stuMark <= i->stuMark)
		{
			listcopy.insert(i, temp);//正序插入
			break;
		}
	}
	if (i == listcopy.end())//special situation
	{
		listcopy.insert(i, temp);
	}
}
int main()
{
	printf("请输入需要录入学生的总人数\n");
	int personAmount;
	cin >> personAmount;

	StuInfoList Class1;
	printf("依次输入 姓名 学号 成绩\n");
	ListClassInput(Class1,personAmount);

	Class1.sort();
	printf("排序完成\n");
	ListDisplay(Class1);

	StudentInfo extraStudent;
	while (1)
	{
		printf("请输入需要补录的学生:\n");
		ClassInput(extraStudent);
		SortAndInsert(Class1, extraStudent);
		printf("补录完成!\n");
		ListDisplay(Class1);
	}

	cin.get();
	cin.get();
    return 0;
}



                
  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值