IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 66_C++_使用List容器完成评委给学生打分【难点:每次的迭代器都需要,斟酌一下,是否需要重新指向一下begin()首端】【注意:非线性,需要对‘+‘号重载】 -> 正文阅读

[C++知识库]66_C++_使用List容器完成评委给学生打分【难点:每次的迭代器都需要,斟酌一下,是否需要重新指向一下begin()首端】【注意:非线性,需要对‘+‘号重载】

难点:

注意其中的begin()
另外注意advance(pnum, j);中的pnum 以及(pstart + i)中的pstart 什么时候迭代器需要重新指向头部

main.cpp

#include <iostream>
#include<list>
#include<algorithm>
using namespace std;

class stu
{
public:
    stu()
    {

    }
    stu(string name)
    {
        this->name=name;
    }

    float score=0.0f;//存平均分
    string name;
};

//(pstart + i),需要对’+‘号重载
list<stu>::iterator &operator +(list<stu>::iterator &midpstart, int pos)
{
    while(pos--)
    {
        midpstart++;
    }
    return midpstart;
}

bool mysort(float a,float b)
{
    return a>b;
}

int main()
{
    //list容器不能遍历插入,请注意!!!!
    list<stu>l1;
    l1.push_back(stu("赵四"));
    l1.push_back(stu("陈五"));
    l1.push_front(stu("王一"));
    l1.insert(l1.begin(), stu("李二"));
    l1.insert(l1.begin(), stu("张三"));

    for_each(l1.begin(), l1.end(), [=](const stu&a){
        cout << a.name << endl;
    });

    int n = l1.size();

    for(int i = 0; i < n; i++)
    {
        //迭代器pstart每次都要重新指向头端
        //因为要每次定位到i,所在的位置
        list<stu>::iterator pstart = l1.begin();
        list<int>l1_num;

        cout<< "给 " << (pstart + i)->name << " 学生打分"<< endl;
        for(int j = 0; j < n; j++)
        {
            //迭代器pnum每次都要重新指向头端
            list<int>::iterator pnum = l1_num.begin();
            int midnum = 0;
            cin >> midnum;

            //因为要每次定位到j,所在的位置
            advance(pnum, j);
            l1_num.insert(pnum, midnum);
        }

        l1_num.sort(mysort);
        l1_num.pop_back();
        l1_num.pop_front();

        cout << "验证:去除最高最低的分数是"<< endl;
        for_each(l1_num.begin(), l1_num.end(), [=](const int a){
            cout << a << endl;
        });


        //每次迭代器遍历容器内的分数都从头开始
        list<int>::iterator pnum2 = l1_num.begin();
        int score_num = 0;
        for( ; pnum2 != l1_num.end(); )
        {
            score_num += *pnum2;
            pnum2++;
        }

        //list容器写这样的问题总是有坑
        //这里初始化一下,因为是第i个学生的总平均分。。
        pstart = l1.begin();
        int avg = score_num / l1_num.size();
        (pstart + i)->score = avg;
        cout << pstart->name << "的平均分是 " << pstart->score << endl;

        //pnum2 = l1_num.begin();

    }

    for(list<stu>::iterator it = l1.begin(); it != l1.end(); it++)
    {
        cout << " 姓名: "<< it->name << " 分数: " << it->score << endl;
    }

    return 0;
}

图示:

在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:10:21  更:2021-08-21 15:12:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 1:56:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码