C++ deque容器操作 总结
------------------------------------ deque容器
双口容器
-----基本操作:
插入 push_back() push_front() insert()
front() back() 处理元素
begin() end() rbegin() rend() 处理迭代器
删除 pop_front() pop_back()
-----特性总结:
双端插入和删除元素效率更高
指定位置插入也会导致数据元素移动,降低效率
可随机存储,效率高
-----------------------------deque API
deque构造操作
deque<T> deqT; 默认构造形式
deque(beg,end); 构造函数将[beg,end)区间的元素拷贝给本身
deque(n,elem); 构造函数将n个elem拷贝给本身
deque(const deque& deq); 拷贝构造函数
deque 赋值操作
assign(beg,end); 将[beg,end)区间中的数据拷贝赋值给本身
assign(n,elem); 将n个elem拷贝赋值给本身
deque& operator= (const deque& deq); 重载=操作符
swap(deq); 将deq与本身元素互换
deque 大小操作
deque.size(); 返回容器中元素个数
deque.empty(); 判断容器是否为空
deque.resize(num); 重新指定容器长度为num,若容器边长,则以默认值填充新位置。若容器变短,则超出部分被删除
deque.resize(num,elem); 重新指定容器长度为num,若容器边长,则以elem填充新位置。若容器变短,则超出部分被删除
deque 双端插入和删除操作
push_back(elem); 在容器尾部插入一个数据
push_front(elem); 在容器头部插入一个数据
pop_back(); 删除容器最后一个数据
pop_front(); 删除容器第一个数据
deque 数据存取
at(idx); 返回索引idx所指向的数据 若idx越界,抛出out_of_range
operator[]; 返回索引idx所指向的数据 若idx越界,不抛出异常,直接报错
front(); 返回第一个元素
back(); 返回最后一个元素
测试代码如下:
#include<iostream>
#include<deque>
using namespace std;
void PrintDeque (deque<int> deq) { //迭代器遍历
for (deque<int>::iterator it = deq.begin();it != deq.end();it ++) {
cout << *it << " ";
}
cout << endl;
}
//初始化
void test01 () {
deque<int> d1;
deque<int> d2(10,5);
deque<int> d3(d2.begin(),d2.end());
deque<int> d4(d3);
//迭代器方式 打印d4
PrintDeque(d4);
}
//赋值大小操作
void test02 () {
deque<int> d1;
deque<int> d2;
deque<int> d3;
d1.assign(10,5);
d2.assign(d1.begin(),d1.end()); //迭代器指定区间赋值
d3 = d2; //等号赋值
d1.swap(d2); //交换空间元素
if (d1.empty()) {
cout << "空!" << endl;
}
else cout << "size:" << d1.size() << endl;
d1.resize(5); //十个元素,保留前五个
}
//deque 容器的插入和删除
void test03 () {
deque<int> d1;
d1.push_back(100);
d1.push_front(200);
d1.push_back(300);
d1.push_back(400);
d1.push_front(500);
//5 2 1 3 4
PrintDeque(d1);
cout << d1.front() << " " << endl; //拿到被删除的数据
d1.pop_front(); //删除头
cout << d1.back() << " " << endl;
d1.pop_back(); //删除尾
PrintDeque(d1);
}
练习:
----------------------评委打分案例---------------------------
评委打分案例(sort 算法排序)
创建5个选手(姓名,得分),10个评委对5个选手进行打分
得分规则:去掉最高分,去掉最低分,取平均值
按得分对5名选手进行排名
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<deque>
#include<string>
#include<algorithm>
using namespace std;
//选手类
class Player {
public:
Player () {}
Player (string name,int score):name(name),score(score) {}
public:
string name;
int score;
};
//创建选手
void Creat_Player (vector<Player>& v) {
string nameSeed = "ABCDE";
for (int i = 0;i < 5;i ++) {
Player p;
p.name += nameSeed[i];
p.score = 0;
v.push_back(p);
}
}
//回调函数1 (用于测试)
void PrintScore (int val) {
cout << val << " ";
}
//打分
void Set_Score (vector<Player>& v) {
//设置随机种子
srand(time(0));
for (vector<Player>::iterator it = v.begin();it != v.end();it ++) {
//当前学生进行打分
//存储随机生成分数
deque<int> dScroe;
for (int i = 0;i < 10;i ++) {
int score = rand() % 41 + 60;
dScroe.push_back(score);
}
//对分数排序 默认从小到大
sort(dScroe.begin(),dScroe.end());
//for_each(dScroe.begin(),dScroe.end(),PrintScore);
//cout << endl;
//去除最高分 和 最低分
dScroe.pop_front();
dScroe.pop_back();
//求平均分
int totalScore = 0;
for (deque<int>::iterator it = dScroe.begin();it != dScroe.end();it ++) {
totalScore += (*it);
}
int avgScore = totalScore / dScroe.size();
//保存分数
(*it).score = avgScore;
}
}
//排序规则
bool cmp (Player& p1,Player& p2) {
return p1.score > p2.score;
}
//回调函数2
void PrintResult (Player& p) {
cout << "姓名:" << p.name << " 分数:" << p.score << endl;
}
//根据选手分数排序 sort算法默认从小到大 改为从大到小
void Print_Score (vector<Player>& v) {
//排序
sort(v.begin(),v.end(),cmp);
for_each(v.begin(),v.end(),PrintResult);
}
int main () {
vector<Player> vPlist;
Creat_Player(vPlist);
Set_Score(vPlist);
Print_Score(vPlist);
return 0;
}
C++ deque容器操作 总结的更多相关文章
- STL学习三:deque容器
1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常 ...
- STL学习系列三:Deque容器
1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常 ...
- 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化
1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...
- vector,list,deque容器的迭代器简单介绍
我们知道标准库中的容器有vector,list和deque.另外还有slist,只不过它不是标准容器.而谈到容器,我们不得不知道进行容器一切操作的利器---迭代器.而在了解迭代器之前,我们得先知道每个 ...
- 带你深入理解STL之Deque容器
在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操 ...
- STL之Deque容器
1.Deque容器 1)deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. 2)deque在接口上和vect ...
- 顺序容器----顺序容器操作,vector对象如何增长,额外的string操作,容器适配器
一.顺序容器操作 1.向顺序容器添加元素 向顺序容器(array除外)添加元素的操作: 操作 说明 c.push_back(t) 在c的尾部创建一个值为t的元素.返回void c.emplace_ba ...
- STL容器能力一览表和各个容器操作函数异常保证
STL容器能力一览表 Vector Deque List Set Multiset map Multimap 典型内部 结构 dynamic array Array of arrays Doubly ...
- STL Deque 容器
STL Deque 容器 Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双 端的,而vector是单端的. ...
- C++——STL之vector, list, deque容器对比与常用函数
STL 三种顺序容器的特性对比: vector 可变数组,内存空间是连续的,容量不会进行缩减.支持高效随机存取,即支持[]和at()操作.尾部插入删除效率高,其他位置插删效率较低: list 双向链表 ...
随机推荐
- Global.asax
转
备忘: 项目中的Global.asax文件里通常包含这5个方法: Application_Start – web 应用程序最初启动时执行 Application_End – 应用程序关闭时运行 App ...
- Rocketmq 如何处理消息积压 ?
一.消息积压发现 1.Console入口 A.延迟数量(Delay) 消息积压数量,即当前Topic还剩下多少消息未处理,该值越大,表示积压的消息越多 B.最后消费时间(LastConsumeTime ...
- mybatis的模糊查询的实现方式
一.比较灵活 1:xml的配置 <select id="selectUserByUsername1" parameterType="string" res ...
- 函数组件的声明方式及差异+React.memo和userCallback区别
1.函数组件的声明方式及差异 普通函数声明 箭头函数声明 使用React.FC类型(TypeScript专用) interface Props { content: string } // 写法一 c ...
- xl2411p 显示器分辨率问题 IPS\TN
本来是想玩游戏来着,后来也没能玩起: 留下了个显示器明基xl2411p,昨天扒出来用起来吧. 玩游戏没毛病的,毕竟都是图片不存在文字的渲染问题,日常办公用起来就难受了,TN屏真是难受的了. 本来24寸 ...
- Navicat Premiun已经停止工作
与网易有道词典冲突.退出词典即可.
- SpringBoot静态资源访问--转载
转载地址:https://www.jianshu.com/p/d40ee98b84b5
- 【转载】coroutine 与 goroutine 区别
如下原文转载自C语言中文网 C#.Lua.Python 语言都支持 coroutine 特性.coroutine 与 goroutine 在名字上类似,都可以将函数或者语句在独立的环境中运行,但是它们 ...
- 传统的可扩展架构模式:分层架构和SOA
极客时间:<从 0 开始学架构>:传统的可扩展架构模式:分层架构和SOA 分层架构 分层架构是很常见的架构模式,它也叫 N 层架构,通常情况下,N 至少是 2 层.例如,C/S 架构.B/ ...
- Kafka King 推荐一款漂亮、现代、实用的kafka客户端
Kafka King 一个漂亮.现代.实用的kafka客户端,使用python flet.flutter构建. Github主页:https://github.com/Bronya0/Kafka-Ki ...