• deque容器 常用 API操作


    deque 头文件 #include

    1 双端插入和删除操作

    void test1() {
        deque dq;
        dq.push_back(1);//尾插
        dq.push_back(2);
        dq.push_back(3);
        dq.push_front(4);//头插
        dq.push_front(5);
        dq.push_front(6);
    
        //遍历
        printDequeInt(dq);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    打印

    void printDequeInt(deque& dq) {
        deque::iterator it = dq.begin();
        for (; it != dq.end(); it++)
            cout << *it << " ";
        cout << endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    删除头和尾元素

       dq.pop_back();//尾删
        dq.pop_front();//头删
    
        //打印
        cout << "\n删除后大小:" << dq.size() << endl;
        printDequeInt(dq);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    2 deque应用案例

    deque用的多的地方就是竞技类,选手打分,去掉最高分和最低分;

    2.1 题目描述

    有 5 名选手:选手 ABCDE,10 个评委分别对每一名选手打分,去除最高分,去除评委中最低分,取平均分。

    1. 创建五名选手,放到 vector 中
    2. 遍历 vector 容器,取出来每一个选手,执行 for 循环,可以把 10 个评分打分存到 deque 容器中
    3. sort 算法对 deque 容器中分数排序,pop_back 、pop_front 去除最高和最低分
    4. deque 容器遍历一遍,累加分数,累加分数/d.size()
    5. person.score = 平均分

    在这里插入图片描述

    2.2 实现

    #include//accumulate()累加函数
    #include//添加随机种子,srand(time(NULL));

    #include
    #include
    #include
    #include
    #include//accumulate()累加函数
    #include//添加随机种子,srand(time(NULL));
    using namespace std;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    class Person
    {
    public:
        Person(string name, float score)
        {
            this->m_Name = name;
            this->m_Score = score;
        }
    
        string m_Name;
        float m_Score;
    };
    
    //创建选手
    void creatPerson(vector& p) {
        string tmpName = "ABCDE";
        for (int i = 0; i < 5; i++) {
            string name = "选手";
            name += tmpName[i];
            p.push_back(Person(name,0.0f));//初始选手的分数都是0
        }
    }
    
    //显示选手
    void showPerson(vector& p) {
        vector::iterator it = p.begin();
        for (; it != p.end(); it++)
            cout << (*it).m_Name << "  成绩:" << (*it).m_Score << endl;
    }
    
    //比赛
    void playGame(vector& p) {
        vector::iterator it = p.begin();
        deque d;
        for (; it != p.end(); it++) {//5名选手
            for (int i = 0; i < 10; i++) {//10名评委
                d.push_back((float)(rand() %41 + 60));//随机分在60~100 (0~40 + 60)
            }
            //对10个成绩排名
            sort(d.begin(),d.end());
            
            //去掉最低分和最高分
            d.pop_front();
            d.pop_back();
    
            //剩下8个分数求平均 = 最后得分
            //accumulate()求和 / szie();  //accumulate()头文件#include
            (*it).m_Score = (float)accumulate(d.begin(), d.end(), 0) / d.size(); //加0
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    测试

    void test2() {
        vector v;
        //设置随机数种子,否则随机数每次都不变
        srand(time(NULL));
    
        //创建选手
        creatPerson(v);
    
        //显示选手
        showPerson(v);
    
        //比赛
        playGame(v);
    
        //显示成绩
        showPerson(v);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    2.3 注意事项

    (1)rand()随机函数
    //设置随机数种子,否则随机数每次都不变
    srand(time(NULL));

    (2)累加求和 accumulate()

    accumulate定义在#include中,
    作用有两个,一个是累加求和,另一个是自定义类型数据的处理;

    int sum = accumulate(vec.begin() , vec.end() , 42);
    
    • 1

    accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。
    accumulate函数将它的一个内部变量设置为指定的初始值,然后在此初值上累加输入范围内所有元素的值。accumulate算法返回累加的结果,其返回类型就是其第三个实参的类型。

  • 相关阅读:
    付费进群搭建二维码
    Linux杀掉僵尸进程方法
    分享面试阿里、京东、网易等大厂后的面经及面试心得—远程面试
    报错 | devtools工具安装问题
    智能AI知识库,增强AI知识的开源项目
    236. 二叉树的最近公共祖先
    济宁市中考报名照片要求及手机拍照采集证件照方法
    手把手教你做主成分分析
    计算机是什么
    Python windows安装Python3环境
  • 原文地址:https://blog.csdn.net/m0_51233386/article/details/126481269