------------------------------------ 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容器操作 总结的更多相关文章

  1. STL学习三:deque容器

    1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常 ...

  2. STL学习系列三:Deque容器

    1.Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口上和vector非常 ...

  3. 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化

    1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...

  4. vector,list,deque容器的迭代器简单介绍

    我们知道标准库中的容器有vector,list和deque.另外还有slist,只不过它不是标准容器.而谈到容器,我们不得不知道进行容器一切操作的利器---迭代器.而在了解迭代器之前,我们得先知道每个 ...

  5. 带你深入理解STL之Deque容器

    在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操 ...

  6. STL之Deque容器

    1.Deque容器 1)deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. 2)deque在接口上和vect ...

  7. 顺序容器----顺序容器操作,vector对象如何增长,额外的string操作,容器适配器

    一.顺序容器操作 1.向顺序容器添加元素 向顺序容器(array除外)添加元素的操作: 操作 说明 c.push_back(t) 在c的尾部创建一个值为t的元素.返回void c.emplace_ba ...

  8. STL容器能力一览表和各个容器操作函数异常保证

    STL容器能力一览表 Vector Deque List Set Multiset map Multimap 典型内部 结构 dynamic array Array of arrays Doubly ...

  9. STL Deque 容器

    STL Deque 容器 Deque简介 deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双 端的,而vector是单端的.         ...

  10. C++——STL之vector, list, deque容器对比与常用函数

    STL 三种顺序容器的特性对比: vector 可变数组,内存空间是连续的,容量不会进行缩减.支持高效随机存取,即支持[]和at()操作.尾部插入删除效率高,其他位置插删效率较低: list 双向链表 ...

随机推荐

  1. Solana编译失败探讨(OpenEuler RISC-V版)

      Solana 是 2017 年由 Anatoly Yakovenko 创立的开源项目,旨在打造高性能.去中心化且低成本的区块链平台2.它采用独特的 Proof of History(PoH)共识机 ...

  2. 独家推荐!这款端到端AI测试工具 Testim,让效率飙升!(支持移动端、Web端)

    在当今快速发展的软件开发时代,确保软件质量成为每个开发团队的首要任务. 随着人工智能(AI)和机器学习(ML)技术的飞速发展,AI测试工具应运而生,为软件测试领域带来了革命性的变化.今天,我要向大家强 ...

  3. 2021年扩展DevOps的6种方法

    2021年扩展DevOps的6种方法 加强devops流程的自动化 为了满足快速.高质量应用程序交付的需求,现代软件团队需要一种超越常规性能测试的方法.在这里,以devops为中心的方法可以提供更快. ...

  4. 目前国内可用Docker镜像源汇总(截至2024年11月)

    本文主要讲述了由于特殊原因国内的 Docker 镜像源出现问题,国内许多常见的镜像源如网易.百度等已不可用.文中介绍了中科大镜像源的暂时关闭情况,以及阿里镜像源包括私人阿里镜像加速器的使用方式,并提供 ...

  5. python tkinker答题工具简易实现

    分享一个简单的python tkinker实现的答题工具,效果参见https://www.bilibili.com/video/BV13e4y1E71d/ 点击查看代码 import tkinter ...

  6. python同时给多个邮箱地址发送邮件

    这个帖子内讲了怎么发邮件:https://www.cnblogs.com/becks/p/14589314.html 下图红框内于发送目标邮件地址有关 讲红框内信息修改为下方代码,即可实现向多人发送邮 ...

  7. 小程序组件使用全局样式app.wxss

    Component({ options: { addGlobalClass: true } })

  8. 多年后再做Web开发,AI帮大忙

    最近在AI辅助下做一个简单的网站开发,真是感叹AI的强大呀! 虽然多年前我做过Web前端和后端开发,但是那时候的开发没有现在这么容易入门.上手. 之前SSH(Structs2+Spring+Hiber ...

  9. 一文速通Python并行计算:09 Python多进程编程-进程之间的数据同步-基于互斥锁、递归锁、信号量、条件变量、事件和屏障

    一文速通 Python 并行计算:09 Python 多进程编程-进程之间的数据同步-基于互斥锁.递归锁.信号量.条件变量.事件和屏障 摘要: 多进程同步机制包括互斥锁.递归锁.信号量.条件变量.事件 ...

  10. 如何基于 Kestrel 实现 socks5 代理

    前言 之前做了个轮子NZOrz, 本来打算慢慢参照Kestrel和Yarp长久地写着玩 奈何川普上台,关税,订婚案,自身和钱包等等各种乐子层出不穷,无暇慢悠悠地写轮子玩 还有有些盆友也想知道能否直接使 ...