STL之deque篇
deque容器特性:双口容器支持随机访问没有容量概念,他是动态的的以分段的连续空间组合而成,随时可以增加一段新的空间并连接起来deque常用API构造函数deque<T> deqT;//默认构造形式deque(begin, end);//构造函数将[begin, end)区间的元素拷贝给自身deque(n, elem);//构造函数将n个elem拷贝给...
·
deque容器
特性:
- 双口容器
- 支持随机访问
- 没有容量概念,他是动态的的以分段的连续空间组合而成,随时可以增加一段新的空间并连接起来
deque常用API
构造函数
deque<T> deqT; //默认构造形式
deque(begin, end); //构造函数将[begin, end)区间的元素拷贝给自身
deque(n, elem); //构造函数将n个elem拷贝给自身
deque(const deque &deq); //拷贝构造函数
赋值操作
assign(begin, end); //将[begin, end)区间中的数据拷贝赋值给自身
assign(n, elem); //将n个elem拷贝复制给自身
deque& operator=(const deque &deq); //重载等号操作
swap(deq); //将deq与本身的元素互换
大小操作
deque.size(); //返回容器中元素的个数
deque.empty(); //判断容器是否为空
deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除
deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除
双端插入和删除操作
push_back(elem); //在容器尾部添加一个数据
push_front(elem); //在容器头部插入一个数据
pop_back(); //删除容器最后一个数据
pop_front(); //删除容器第一个数据
数据存取
at(idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range
operator[]; //返回索引idx所指的数据,如果idx越界,不抛出异常,直接报错
front(); //返回第一个数据
back(); //返回最后一个数据
插入操作
insert(pos, elem); //在pos位置插入一个elem元素的拷贝,返回新数据的位置
insert(pos, n, elem); //在pos位置插入n个elem数据,无返回值
insert(pos, beg, end); //在pos位置插入[beg, end)区间的数据,无返回值
删除操作
clear(); //删除容器所有数据
erase(beg, end); //删除[beg, end)区间的数据,返回下一个数据的位置
erase(pos); //删除pos位置的数据,返回下一数据的位置
deque容器打分案例
/*
评委打分案例
创建五个选手(姓名,分数),十个评委对他们进行打分
得分规则:去除最高分,去除最低分,剩下的取平均分
对五名选手的平均分进行排名
*/
#include<iostream>
#include<vector>
#include<deque>
#include<string>
#include <algorithm>
using namespace std;
//选手类
class Player
{
public:
Player() {}
Player(string name, int score) :m_Name(name), m_Score(score) {}
public:
string m_Name;
int m_Score;
};
//创建选手
void CreatePlayer(vector<Player>& v)
{
string nameStr = "ABCDE";
int len = nameStr.length();
for (int i = 0; i < len; i++)
{
Player p;
p.m_Name = "选手";
p.m_Name += nameStr[i];
p.m_Score = 0;
v.push_back(p); //将选手信息存入数组中
}
}
//打分
void ScorePlayer(vector<Player>& v)
{
vector<Player>::iterator itBegin = v.begin();
vector<Player>::iterator itEnd = v.end();
for (itBegin; itBegin != itEnd; itBegin++)
{
//当前学生打分
deque<int> dScore;
for (int i = 0; i < 10; i++)
{
int score = rand() % 41 + 60;
dScore.push_back(score);
}
//排序,找出最大最小值并去除
sort(dScore.begin(), dScore.end()); //sort()默认从小到大
dScore.pop_front();
dScore.pop_back();
//求平均分
int total=0;
deque<int>::iterator ditBegin = dScore.begin();
deque<int>::iterator ditEnd = dScore.end();
for (ditBegin; ditBegin != ditEnd; ditBegin++)
{
total += *ditBegin;
}
(*itBegin).m_Score = total / dScore.size();
}
}
//排名规则
bool RegularSort(Player& p1, Player& p2)
{
return p1.m_Score > p2.m_Score;
}
//排名
void SortPlayer(vector<Player>& v)
{
//从大到小排序
sort(v.begin(), v.end(),RegularSort);
//打印
vector<Player>::iterator itBegin = v.begin();
vector<Player>::iterator itEnd = v.end();
for (itBegin; itBegin != itEnd; itBegin++)
{
cout << "姓名:" << (*itBegin).m_Name <<
" 分数:" << (*itBegin).m_Score << endl;
}
}
int main()
{
//定义vector容器保存选手信息
vector<Player> vPlist;
CreatePlayer(vPlist);
ScorePlayer(vPlist);
SortPlayer(vPlist);
return 0;
}
更多推荐
已为社区贡献4条内容
所有评论(0)