C++容器deque的用法

目录

1.deque容器概念

2.deque对象的构造

2.1deque对象的默认构造

2.2deque对象的带参数构造

3.deque头部和末尾的添加移除操作

4.deque的数据存取

5.deque与迭代器

6.deque的赋值

7.deque的大小

8.deque的插入

9.deque的删除


1.deque容器概念

deque容器概念

deque是“double-ended queue”的缩写,和vector一样都是STL的容器,唯一不同的是:

deque是双端数组,而vector是单端的。

 

 Deque 特点:

  • deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
  • deque可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法)
  • deque头部和尾部添加或移除元素都非常快速, 但是在中部安插元素或移除元素比较费时。

使用时,包含头文件:#include <deque>  

2.deque对象的构造

2.1deque对象的默认构造

deque也是采用模板类实现。

deque对象的默认构造形式:deque<T> deqT

例如:

deque <int> deqInt;            //存放int的deque容器。

deque <float> deqFloat;         //存放float的deque容器。

deque <student> deqStu;        //存放student的deque容器。

...

注意:尖括号内还可以设置指针类型或自定义类型。 

2.2deque对象的带参数构造

方式1:deque(beg,end);    //构造函数将[beg, end)区间中的元素拷贝给本身。

方式2:deque(n,elem);   //构造函数将n个elem拷贝给本身。

方式3:deque(const deque  &deq);  //拷贝构造函数。

deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deque<int> deqIntB(deqIntA.begin(),deqIntA.end()); //1 2 3 4deque<int> deqIntC(8, 666); //8 8 8 8 8deque<int> deqIntD(deqIntA); //1 2 3 4

3.deque头部和末尾的添加移除操作

1.deque.push_back(element); //容器尾部添加一个数据

2.deque.push_front(element); //容器头部插入一个数据

3.deque.pop_back();         //删除容器最后一个数据

4.deque.pop_front();     //删除容器第一个数据

deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);deqIntA.push_back(6);deqIntA.pop_front();deqIntA.pop_front();deqIntA.push_front(7);deqIntA.push_front(8);deqIntA.pop_back();deqIntA.pop_back();deqIntA 中剩余元素: 8 7 3 4 

4.deque的数据存取

第一  使用下标操作 deqIntA[0] = 100;

第二  使用at 方法 如: deqIntA.at(2) = 100;

第三  接口返回的引用 deqIntA.front() 和 deqIntA.back()  

注意:   第一和第二种方式必须注意越界

例如:deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);int i1 = deqIntA.at(0); //i1 = 1int i2 = deqIntA[1]; //i2 = 2deqIntA.at(0) = 666; //第一个元素改成666deqIntA[1] = 888; //第二个元素改成888int iFront = deqInt.front(); //666int iBack = deqInt.back(); //5deqInt.front() = 888; //第一个元素改成  888deqInt.back() = 666; //最后一个元素改成 666

5.deque与迭代器

1.deque.begin();  //返回容器中第一个元素的迭代器。

2.deque.end();   //返回容器中最后一个元素之后的迭代器。

3.deque.rbegin();  //返回容器中倒数第一个元素的迭代器。

4.deque.rend();   //返回容器中倒数最后一个元素之后的迭代器。

5.deque.cbegin();  //返回容器中第一个元素的常量迭代器。

6.deque.cend();   //返回容器中最后一个元素之后的常量迭代器。

deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);//普通迭代器for(deque<int>::iterator it = deqIntA.begin(); it!=deqIntA.end(); ++it){(*it)++;  //*it++  (*it)++cout<<*it;cout<<" ";}//常量迭代器deque<int>::const_iterator cit = deqIntA.cbegin();for( ; cit!=deqIntA.cend(); cit++){cout<<*cit;cout<<" ";}//逆转的迭代器for(deque<int>::reverse_iterator rit=deqIntA.rbegin(); rit!=deqIntA.rend(); ++rit){cout<<*rit;cout<<" ";}

6.deque的赋值

1.deque.assign(beg,end);    //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。

2.deque.assign(n,elem);  //将n个elem拷贝赋值给本身。

3.deque& operator=(const deque &deq); //重载等号操作符

4.deque.swap(deq);  // 将deque与本身的元素互换

例如:deque<int> deqIntA,deqIntB,deqIntC,deqIntD;deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);deqIntB.assign(deqIntA.begin(),deqIntA.end()); // 1 2 3 4 5deqIntC.assign(4,888); //888 888 888 888 deqIntD = deqIntA; //1 2 3 4 5deqIntC.swap(deqIntD); //互换

7.deque的大小

1.deque.size();     //返回容器中元素的个数

2.deque.empty();     //判断容器是否为空

3.deque.resize(num);    //重新指定容器的长度为num,若容器变长,则以默认值0填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

4.deque.resize(num, elem);  //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

deque<int> deqIntA;deqIntA.push_back(1);deqIntA.push_back(2);deqIntA.push_back(3);deqIntA.push_back(4);deqIntA.push_back(5);int iSize = deqIntA.size();  //5deqIntA.resize(7); //1 2 3 4 5 0 0deqIntA.resize(8,1); //1 2 3 4 5 0 0 1deqIntA.resize(2); //1 2

8.deque的插入

1.deque.insert(pos,elem);   //在pos位置插入一个elem元素的拷贝,返回新数据 的位置。

2.deque.insert(pos,n,elem);   //在pos位置插入n个elem数据,无返回值。

3.deque.insert(pos,beg,end);   //在pos位置插入[beg,end)区间的数据,无返回值

9.deque的删除

1.deque.clear();      //移除容器的所有数据

2.deque.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。

3.deque.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI时代,中国技术创新如何弯道超车?

2019 年 5 月 26 日 - 27 日&#xff0c;杭州国际博览中心&#xff0c;由工信部人才交流中心指导&#xff0c;CSDN 和数字经济人才发展中心主办的 CTA 核心技术及应用峰会圆满落下帷幕。本次大会聚焦机器学习、知识图谱等 AI 领域的热门技术&#xff0c;关注技术在行业中的实践…

JBOSS7启动与关闭

1.启动 进入Jboss的bin目录下 通过以下命令启动jboss ./standalone.sh启动没有问题&#xff0c;但是当你按你ctrl C退出后&#xff0c;jboss服务也关闭了&#xff0c;所以我们要使用后台启动方式&#xff1a; nohup ./standalone.sh&查看Jboss启动进程&#xff1a; tai…

容器云常见安全威胁与防范 | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;除了应对常见云平台和传统数据中心常见的安全威胁&#xff0c;容器云平台还存在一些自…

开启灯光就是近光吗_有用!科目三灯光模拟操作大全

科三考试第一项就是灯光模拟考试&#xff0c;要求考生在5秒之内根据相关语音播报完成相应操作。不少学员在这一项中出错&#xff0c;以至于科三考试还没开出几米就挂了&#xff01;今天通妹特地整理了灯光操作相关技巧&#xff0c;希望大家顺利通过科三第一关&#xff01;语音提…

vmware安装问题:Microsoft Runtime DLL安装程序未能完成安装

文章目录一、vmware安装问题&#xff1a;Microsoft Runtime DLL安装程序未能完成安装1.1 在输入%temp%1.2. 找到{ADC3121A-3EBA-4016-AF64-00B8FE017080}~setup结尾是~setup1.3. 打开该文件夹选择安装程序即可正常安装。一、vmware安装问题&#xff1a;Microsoft Runtime DLL安…

雾计算精华问答 | 雾计算与云计算的区别?

物联网对于数据的处理能力要求很高&#xff0c;怎么能够从庞大的数据海中挖掘一些有价值的信息对于物联网的发展至关重要&#xff0c;因此云计算&#xff0c;雾计算&#xff0c;边缘计算等等都将发挥其左右。今天先让我们来了解一下雾计算吧。1Q&#xff1a;雾计算是如何构成的…

【解决】-bash: ftp: command not found

今天在centos上使用ftp命令连接本机的FTP服务器&#xff08;本机FTP服务使用Vsftpd搭建&#xff09;&#xff0c;出现如下的错误提示&#xff1a;-bash: ftp: command not found 查询相关资料&#xff0c;发现很有可能是FTP命令没有安装。 通过yum方式安装FTP命令: yum insta…

kodi pvr 不能安装_「保姆级教程」家庭影音多媒体中心第5节—KODI18安装/设置IPTV...

一、本章前言&#xff1a;上一章节万晓博SEO带领大学习安装了kodi18播放群晖NAS或者本地视频教程&#xff0c;本节课我们讲讲如何使用kodi播放器看IPTV央视/地方卫视频道&#xff0c;我们遐想下&#xff0c;如果我们使用kodi播放IPTV&#xff0c;这样既可以播放群晖nas或者本地…

使用云原生buildpacks将你的代码转换成Docker Image | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;七年前buildpack技术开源之时&#xff0c;我们就看到了这项技术将大大简化应用的发布过…

Windiws环境安装轻量级文件服务器ftpserver

Windiws环境安装轻量级文件服务器ftpserver 文章目录1. 在线下载&#xff1a;2. 解压3. 以管理员身份运行4. 启动5. 浏览器验证6. 输入账号和口令7. 创建测试文件8. 验证效果图1. 在线下载&#xff1a; 点击即可下载&#xff1a;http://learning.happymmall.com/ftpserver/FTP…

每年一波FPGA系列新品,这次Achronix专为AI/ML应用打造……

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;近日&#xff0c;美国eFPGA IP企业Achronix在京召开产品发布会&#xff0c;推出了全新…

折线图x轴的日期会超出_matplotlib之折线图(代码+解析)

作者&#xff1a;禹棋赢本文推荐一个仓库Plot-Pictures-Tutorial-for-Paper​github.com该仓库会总结论文中常见图形的画法&#xff0c;本节介绍折线图&#xff1a;一、折线图绘制折线图我们通常使用plot函数画曲线&#xff08;折线&#xff09;。每一个plot函数对应一条曲线&a…

K8S精华问答 | Kubernetes集群常见问题

作为是Google开源的容器集群管理系。在Docker技术的基础上&#xff0c;为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能&#xff0c;提高了大规模容器集群管理的便捷性。今天&#xff0c;我们就来看看关于k8s的精华问答吧。1Q:什么是Kubernetes&…

Linux使用yum install 安装程序时,提示“另外一个程序锁定了 yum;等待它退出……”

Linux使用yum install 安装程序时&#xff0c;提示“另外一个程序锁定了 yum&#xff1b;等待它退出……” https://www.cnblogs.com/qf123/p/9909790.html 原因&#xff1a; yum命令一次只能安装一个软件&#xff0c;所以当你下载安装第二个软件包时&#xff0c;系统进程锁会…

小鹏汽车吴新宙:要做全国第一 | 人物志

戳蓝字“CSDN云计算”关注我们哦&#xff01;人物志&#xff1a;观云、盘点、对话英雄。以云计算风云人物为核心&#xff0c;聚焦个人成长、技术创新、产业发展&#xff0c;还原真实与鲜活&#xff01;在国内自动驾驶汽车领域&#xff0c;成立于2014年的小鹏汽车&#xff0c;因…

验证布局中控件的父窗口

验证布局中的控件的父窗口概述示例开发环境项目运行结果结论番外概述 平时在创建一个窗口类的子空间时&#xff0c;一般需要先创建布局&#xff0c;将子控件添加到窗口的布局中。子控件没有显示的指定父窗口时&#xff0c;那么这个布局中的控件的父窗口是布局还是这个窗口类呢…

Centos6.8安装Nginx+域名转发

2分钟搭建企业轻量级反向代理服务器 文章目录一、linux 环境 安装nginx二、需求分析下载/解压/启动tomcat2.1 需求分析2.2 Linux环境下载和配置Tomcat三、nginx域名转发场景13.1 编辑nginx配置文件3.2 创建配置文件中的目录3.3 创建一个配置文件四、编辑配置文件添加映射信息4.…

手机有一个时钟的标志_STM32F7系统配置控制器(SYSCFG)及复位和时钟控制(RCC)...

这篇文章带大家看一下STM32F7的系统配置控制器。系统配置控制器主要用于&#xff1a;1、 选择以太网PHY接口&#xff1b;2、 交换FMC SDRAM存储区域与NOR/PSRAM存储区域&#xff1b;3、 管理GPIO外部中断线连接&#xff1b;在系统控制寄存器里有一个bit位来选择使用哪个选项字定…

Nignx负载均衡

2分钟搭建企业轻量级负载均衡服务器 文章目录一、启动2个tomcat端口为8080和8081二、在/usr/local/nginx/conf/vhost创建static.imooc.com.conf文件一、启动2个tomcat端口为8080和8081 二、在/usr/local/nginx/conf/vhost创建static.imooc.com.conf文件 内容如下&#xff1a;…

qt中QDoubleSPinBox设置其指定的样式及带单位

概述 本文旨在记录使QDoubleSpinBox呈现出行编辑器QLineEdit的效果&#xff0c;又不使其失去鼠标选中当前的QDoubleSpinBox后滚轮滚动增加减少其值的特性。这里选中的控件还是QDoubleSPinBox,在样式设置上使其呈现行编辑的效果&#xff0c;功能上继续保持滚轮滚动的时候数值增…