deque容器

11 篇文章 2 订阅
文章介绍了C++中的deque容器,作为双端动态数组,它可以高效地在两端添加和移除元素,与vector的区别在于deque允许两端操作。文中通过示例展示了deque的使用,包括插入、删除等操作,并给出了一个使用deque存储评委打分并计算平均分的竞赛场景。
摘要由CSDN通过智能技术生成

1、deque容器简介

deque是双端动态数组,可以在容器的两端分别做元素的增加和删除,但是vectoe是单端动态数组,只可以在容器末尾进行增加和删除元素操作
在这里插入图片描述
由于两端开口进行掺入或者删除,所以deque容器是没有容量的

2、deque的使用

各种构造函数、拷贝函数、赋值函数、插入或者删除函数和前面的 vector 是一样的

#include <iostream>
#include <deque>
using namespace std;
void printfDequeInt(deque<int> &d)
{
    deque<int>::iterator it;
    for(it=d.begin(); it!=d.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}

void test01()
{
    deque<int> d1;
    d1.push_back(1);  //插入尾元素
    d1.push_back(2);
    d1.push_back(3);
    d1.push_front(4);  //插入头元素
    d1.push_front(5);
    d1.push_front(6);
    printfDequeInt(d1);//6 5 4 1 2 3

    cout<<"大小:"<<d1.size()<<endl;
    d1.pop_front();       //删除头元素
    printfDequeInt(d1);//5 4 1 2 3
    d1.pop_back();          //删除尾元素
    printfDequeInt(d1);//5 4 1 2
    d1.insert(d1.begin()+1,3, 100);    //若一个迭代器可以加 1,那么该迭代器是随机访问迭代器
    printfDequeInt(d1);//5 100 100 100 4 1 2
}

3、deque应用范围

deque用于类似竞技的数据

4、deque案例

在这里插入图片描述
定义选手类

#include<vector>
class Player
{
public:
    string name;
    float score;
public:
    Player(){}
    Player(string name,float score=0.0f)    //赋值默认值
    {
        this->name = name;
        this->score=score;
    }
};

创建 5 名选手,保存到 vector 容器中

void createPlayer(vector<Player> &v)
{
    string seedName = "ABCDE";
    int i=0;
    for(i=0;i<5;i++)
    {
        string tmpName = "选手";
        tmpName+=seedName[i];

        v.push_back(Player(tmpName));
    }
}

有 10 个评委对每一个选手进行打分,每一个选手设置一个 deque 保存打的分数

#include<stdlib.h>
#include<time.h>
#include<algorithm>
void playGame(vector<Player> &v)
{
    //设置随机数 种子
    srand(time(NULL));
    //每名选手都要参加
    vector<Player>::iterator it;
    for(it=v.begin(); it!=v.end();it++)
    {
        //10个评委打分
        deque<float> d;
        int i=0;
        for(i=0;i<10;i++)
        {
            d.push_back(rand()%41+60);   //成绩是在 60~100
        }

        // 对d容器排序
        sort(d.begin(),d.end());

        //去掉最高分
        d.pop_back();
        //去掉最低分
        d.pop_front();

        //设置每一个选手的平均成绩,,accumulate是#include<algorithm>中自带的算法
        (*it).score = accumulate(d.begin(),d.end(), 0)/d.size();
    }
}

展示每一个选手对应的平均成绩

void showScore(vector<Player> &v)
{
    vector<Player>::iterator it;
    for(it=v.begin(); it!=v.end();it++)
    {
        cout<<(*it).name<<"所得分数:"<<(*it).score<<endl;
    }
}
void test02()
{
    //创建5名选手 放入vector容器中
    vector<Player> v;
    createPlayer(v);

    //开始比赛
    playGame(v);

    //公布成绩
    showScore(v);
}

int main(int argc, char *argv[])
{
    test02();
    return 0;
}

所有的代码如下

#include<vector>
class Player
{
public:
    string name;
    float score;
public:
    Player(){}
    Player(string name,float score=0.0f)
    {
        this->name = name;
        this->score=score;
    }
};
void createPlayer(vector<Player> &v)
{
    string seedName = "ABCDE";
    int i=0;
    for(i=0;i<5;i++)
    {
        string tmpName = "选手";
        tmpName+=seedName[i];

        v.push_back(Player(tmpName));
    }
}
#include<stdlib.h>
#include<time.h>
#include<algorithm>
void playGame(vector<Player> &v)
{
    //设置随机数 种子
    srand(time(NULL));
    //每名选手都要参加
    vector<Player>::iterator it;
    for(it=v.begin(); it!=v.end();it++)
    {
        //10个评委打分
        deque<float> d;
        int i=0;
        for(i=0;i<10;i++)
        {
            d.push_back(rand()%41+60);   //成绩是在 60~100
        }

        // 对d容器排序
        sort(d.begin(),d.end());

        //去掉最高分
        d.pop_back();
        //去掉最低分
        d.pop_front();

        //设置每一个选手的平均成绩,,accumulate是#include<algorithm>中自带的算法
        (*it).score = accumulate(d.begin(),d.end(), 0)/d.size();
    }
}
void showScore(vector<Player> &v)
{
    vector<Player>::iterator it;
    for(it=v.begin(); it!=v.end();it++)
    {
        cout<<(*it).name<<"所得分数:"<<(*it).score<<endl;
    }
}
void test02()
{
    //创建5名选手 放入vector容器中
    vector<Player> v;
    createPlayer(v);

    //开始比赛
    playGame(v);

    //公布成绩
    showScore(v);
}

int main(int argc, char *argv[])
{
    test02();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q渡劫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值