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;
}