C++ list类存储结构体

本文介绍如何使用C++标准库中的list容器来存储自定义的结构体,并实现排序和有序插入等功能。通过示例代码展示了如何创建结构体、定义比较运算符、输入输出学生信息等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/zhuzexujiaxing/article/details/70307170

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


[html]  view plain  copy
  1. // List_Struct_Study.cpp : 定义控制台应用程序的入口点。  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include <iostream>  
  6. #include <list>  
  7. #include <algorithm>  
  8. #include <string>  
  9. #include <vector>  
  10.   
  11. using namespace std;  
  12.   
  13. typedef struct StudentMark//必须为类型名  
  14. {  
  15.     string stuName;  
  16.     string stuNumber;  
  17.     int stuMark;  
  18.     bool operator < (const StudentMark& c) const //重载小于运算符  
  19.     {  
  20.         return(stuMark < c.stuMark);  
  21.     }  
  22. }StudentInfo;  
  23. typedef list <StudentInfo>  StuInfoList;  
  24.   
  25. void ListDisplay(StuInfoList inputList)   //链表显示函数  
  26. {  
  27.     list<StudentInfo>::iterator i;  
  28.     for ( i = inputList.begin(); i != inputList.end(); ++i)  
  29.     {  
  30.         cout << i->stuName << "\t"  
  31.             << i->stuNumber << "\t"  
  32.             << i->stuMark << endl;  
  33.     }  
  34. }  
  35. void ClassInput(StudentInfo& classTemp)   //结构体输入函数  
  36. {  
  37.     cin >> classTemp.stuName;  
  38.     cin >> classTemp.stuNumber;  
  39.     cin >> classTemp.stuMark;  
  40. }  
  41. void ListClassInput(StuInfoList& classcopy, int amount)//链表输入函数  
  42. {  
  43.     StudentInfo classtemp;  
  44.     for (int i=0; i < amount; ++i)  
  45.     {  
  46.         ClassInput(classtemp);  
  47.         classcopy.push_front(classtemp);  
  48.     }  
  49. }  
  50. void SortAndInsert(StuInfoList& listcopy,const StudentInfo& temp )//排序后有序插入函数  
  51. {  
  52.     list<StudentInfo>::iterator i;  
  53.     int k;  
  54.     for (i = listcopy.begin(); i != listcopy.end(); ++i)  
  55.     {  
  56.         if (temp.stuMark <= i->stuMark)  
  57.         {  
  58.             listcopy.insert(i, temp);//正序插入  
  59.             break;  
  60.         }  
  61.     }  
  62.     if (i == listcopy.end())//special situation  
  63.     {  
  64.         listcopy.insert(i, temp);  
  65.     }  
  66. }  
  67. int main()  
  68. {  
  69.     printf("请输入需要录入学生的总人数\n");  
  70.     int personAmount;  
  71.     cin >> personAmount;  
  72.   
  73.     StuInfoList Class1;  
  74.     printf("依次输入 姓名 学号 成绩\n");  
  75.     ListClassInput(Class1,personAmount);  
  76.   
  77.     Class1.sort();  
  78.     printf("排序完成\n");  
  79.     ListDisplay(Class1);  
  80.   
  81.     StudentInfo extraStudent;  
  82.     while (1)  
  83.     {  
  84.         printf("请输入需要补录的学生:\n");  
  85.         ClassInput(extraStudent);  
  86.         SortAndInsert(Class1, extraStudent);  
  87.         printf("补录完成!\n");  
  88.         ListDisplay(Class1);  
  89.     }  
  90.   
  91.     cin.get();  
  92.     cin.get();  
  93.     return 0;  
  94. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值