STL之List存储结构体

Posted 新生代黑马

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL之List存储结构体相关的知识,希望对你有一定的参考价值。

题目描述:
  编写程序,实现如下学生信息处理功能(要求用List链表实现)
  1) 输入每个学生的信息(学号、姓名、性别及三门课程成绩);
  2) 插入学生信息;
  3) 删除学生信息;
  4) 输入某学生姓名,显示该生的信息;
  5) 计算全班每名学生的平均成绩,并显示;

测试代码:

#include <iostream>
#include <string>
#include <list>
#include <algorithm>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::list;
using std::find_if;

typedef struct
{
    double m_chinese;    // 语文成绩
    double m_math;        // 数学成绩
    double m_english;    // 英语成绩
    double m_average;    // 平均成绩
}Score;

typedef struct
{
    string m_id;    // 学号
    string m_name;    // 姓名
    string m_sex;    // 性别
    Score m_grade;    // 成绩
}Student;

typedef list<Student> StuList;
typedef StuList::iterator StuListIt;

/* 输入学生信息 */
Student InputStudentInfo()
{
    Student stu;
    cout << "请输入学生的学号、姓名、性别、三门成绩:" << endl;
    cin >> stu.m_id >> stu.m_name >> stu.m_sex;
    cin >> stu.m_grade.m_chinese >> stu.m_grade.m_math >> stu.m_grade.m_english;
    return stu;
}

/* 遍历学生信息 */
void PrintAllStudent(StuList stulist)
{
    for (Student s : stulist)
    {
        cout << s.m_id << " " << s.m_name << " " << s.m_sex << " " << s.m_grade.m_chinese << " "
            << s.m_grade.m_math << " " << s.m_grade.m_english << endl;
    }
}

int main(void)
{
    StuList stulist;
    Student stu;

    /* 输入学生信息 */
    stu = InputStudentInfo();
    stulist.push_back(stu);
    PrintAllStudent(stulist);

    /* 插入学生信息 */
    stu = InputStudentInfo();
    stulist.push_front(stu);
    PrintAllStudent(stulist);

    /* 删除学生信息 */
    string _strName;
    cout << "请输入要删除学生的姓名:" << endl;
    cin >> _strName;
    // lambdas表达式
    stulist.remove_if([_strName](Student s) {return (s.m_name == _strName); });
    PrintAllStudent(stulist);

    /* 查询学生信息 */
    cout << "请输入要查询学生的姓名:" << endl;
    cin >> _strName;
    for (Student& s : stulist)
    {
        if (s.m_name == _strName)
        {
            cout << s.m_id << " " << s.m_name << " " << s.m_sex << " " << s.m_grade.m_chinese << " "
                << s.m_grade.m_math << " " << s.m_grade.m_english << endl;
            break;
        }
    }

    /* 计算每个学生的平均成绩 */
    for (Student& s : stulist)
    {
        s.m_grade.m_average = (s.m_grade.m_chinese + s.m_grade.m_math + s.m_grade.m_english) / 3.0;
        cout << s.m_id << " " << s.m_name << " " << s.m_sex << " " << s.m_grade.m_chinese << " "
            << s.m_grade.m_math << " " << s.m_grade.m_english << s.m_grade.m_average << endl;
    }

    return 0;
}

以上是关于STL之List存储结构体的主要内容,如果未能解决你的问题,请参考以下文章

C++ STL之pair详解

STL序列式容器之list

stl源码剖析-序列式容器 之 list

STL之序列式容器list与forward_list

C++中stl模版中的erase()和end()(和我之前提的问题不一样)

《C#零基础入门之百识百例》(六十三)结构体类型数组 -- 学生数据存储