c++:STL标准数据库(deque)_她言笑捻的博客-程序员秘密

技术标签: deque  笔记  STL  

既上篇的vector,这篇描述deque。

deque:

(1)deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。

(2)deque在接口上和vector非常相似,在许多操作的地方可以直接替换。

(3)deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。

(4)deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。

(5)deque采用模板类实现,deque对象的默认构造形式

        deque<T> deqT;   //尖括号内还可以设置指针类型或自定义类型。

        例如:  deque <int> deqInt;            //一个存放int的deque容器。
       

(6)deque的相关用法:

deque(beg,end);                          //构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间。
deque(n,elem);                            //构造函数将n个elem拷贝给本身。
deque(const deque  &deq);        //拷贝构造函数。

deque.push_back(elem);           //在容器尾部添加一个数据
deque.push_front(elem);           //在容器头部插入一个数据
deque.pop_back();                     //删除容器最后一个数据
deque.pop_front();                     //删除容器第一个数据

deque.at(idx);                   //返回索引idx所指的数据,如果idx越界,抛出out_of_range。
deque[idx];                       //返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
deque.front();                   //返回第一个数据。
deque.back();                  //返回最后一个数据

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

deque.assign(beg,end);       //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。
deque.assign(n,elem);         //将n个elem拷贝赋值给本身。
deque& operator=(const deque &deq);    //重载等号操作符 
deque.swap(deq);                                       // 将vec与本身的元素互换

deque.size();           //返回容器中元素的个数
deque.empty();       //判断容器是否为空
deque.resize(num);   //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长                                         度的元素被删除。
deque.resize(num, elem);  //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出                                                  容器长度的元素被删除。

deque.insert(pos,elem);                //在pos位置插入一个elem元素的拷贝,返回新数据的位置。
deque.insert(pos,n,elem);             //在pos位置插入n个elem数据,无返回值。
deque.insert(pos,beg,end);          //在pos位置插入[beg,end)区间的数据,无返回值。

deque.clear();                          //移除容器的所有数据
deque.erase(beg,end);           //删除[beg,end)区间的数据,返回下一个数据的位置。
deque.erase(pos);                  //删除pos位置的数据,返回下一个数据的位置。

举例:注意注释

#include<iostream>
#include<deque>
using namespace std;

int main()
{
	deque<int> d1(10);
	
	for(int i=0;i<d1.size();i++)
	{
		d1[i] = i;
	}
	
	d1.push_back(99);   //在容器尾部插入99
	d1.push_front(88);  //在容器头部插入88
	
	d1.front() = 77;    //返回第一个数据 用77代替
	d1.back() = 66;     //返回最后一个数据 用66代替
	
	d1.pop_back();      //删除容器最后一个数据
	d1.pop_front();     //删除容器第一个数据
	
	for(deque<int>::iterator it = d1.begin(); it != d1.end(); it++)
	{
		cout<< *it <<" ";
	}
	cout<<endl;
	
	cout<< "-----------------" <<endl;
	
	int array[]={1,2,3,4,5,6,3,8,9,3};
	//把区间里面的东西拷给d2
	deque<int> d2(array, array + sizeof(array)/sizeof(array[0]));
	
	deque<int>::iterator it = d2.begin();
	while(it != d2.end())
	{
		if(*it == 3)
		{
			it = d2.erase(it);   //返回下一个元素的迭代器
		}
		else
		{
			it++;
		}
	}
	
	for(deque<int>::iterator it = d2.begin(); it != d2.end(); it++)
	{
		cout<< *it <<" ";         //输出除了3以外的内容
	}
	cout<<endl;
	
	return 0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xutong98/article/details/81454067

智能推荐

如何在excel中写公式连接字符串时如何生成单引号和双引号_excel拼接字符串单引号_风吹过的时光的博客-程序员秘密

如何在excel中写公式连接字符串时如何生成单引号和双引号?本人在工作中常用到excel来辅助编程。当要做大量重复而有规律的操作时,特别是文本编辑,excel的公式可以起到相当强大的作用,增加工作效率!下面介绍其中大家可能常遇到的两个难点。对我来说也是两个容易忘记的点,自己写下来方便以后忘了再查。连接双引号假如有两个单元格,a2,b2。他们的内容分别是 你好 和 我也好 现在我需要用一个公式在c2中显示 “你好,我也好”方法如下:=""""&a2&","&b2&""""总

MySQL主从同步各类型故障总结_mysql 主从同步 1049_Happy_zlh的博客-程序员秘密

主从同步故障总结错误一[ERROR] Slave I/O: error connecting to master '[email protected]:3306' - retry-time: 60 retries: 2, Error_code: 1045错误原因:从库用来连接主库的用户权限或者密码不对解决方法:首先在主库上检查用来主从复制的用户权限,如果没有问题在检查从库使用的密码是否正确。错误二140331 10:08:18 [ERROR] Error reading mas

python字符串按首字母排序,Python按字母順序排序字符串,首先是小寫_weixin_39641231的博客-程序员秘密

I want to sort a given array of strings alphabetically using python, but lowercase words should appear first.我想使用python按字母順序對給定的字符串數組進行排序,但首先應出現小寫字。An example:一個例子:#!/usr/local/bin/python2.7arr=['A','...

centos7 安装 nacos 1.4.1_k↑的博客-程序员秘密

小伙伴们,你们好呀!我是老寇。

新版Edge浏览器弹出“ 禁用开发人员模式扩展 ”的解决方案_燃 keep study的博客-程序员秘密

新版Edge浏览器弹出“ 禁用开发人员模式扩展 ”亲测好用的解决方案最近装好插件百度网盘助手把百度网盘转到aria2下载,结果浏览器总是弹出禁用开发人员模式扩展,在网上搜了很多方法,发现只有这两种对Edge浏览器有用第一种可行的方法:火绒的弹窗拦截,亲测好用,就是会卡几秒第二种可行的方法:官网下载edge dev下载地址:https://www.microsoftedgeinsider.com/en-us/download选择中间的dev版本edge dev还需要再次进行扩展插件的添加。(因

随便推点

JasperReport的使用原因 (2)_conghu4537的博客-程序员秘密

第二步:运行报表为某种格式这一步按某种格式运行报表,生成输出字节流,相当于iReport中点击,不过这一步并未生成输出结果,只是生成输出结果的字节流,为下一步的的输出字节流做好了充分的准备。[@more@]第二步:运行报表为某种...

MyBatis-Plus系列(二)--MyBatis-Plus结合Swagger使用_mybatisplus swagger_码农致富的博客-程序员秘密

一、简介(A)、介绍Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger的目标是对REST API定义一个标准的和语言无关的接口,可让人和计算机无需访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过Swagger进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Sw...

常用端口号对应服务_102端口是什么服务_whatday的博客-程序员秘密

TCP端口(静态端口)TCP 0= ReservedTCP 1=TCP Port Service MultiplexerTCP 2=DeathTCP 5=Remote Job Entry,yoyoTCP 7=EchoTCP 11=SkunTCP 12=BomberTCP 16=SkunTCP 17=SkunTCP 18=消息传输协议,skunTCP 19=SkunTCP 2...

想做国外CPA广告联盟,准备好接受洗礼吧_聆听科技的博客-程序员秘密

CPA联盟国外又称广告联盟国外也叫LEAD,是指导和带领他人完成一定任务的过程,如注册、邮件提交、邮件确认等。其本质是引导访客通过自己的推广链接完成广告主下达的任务,从而获得广告主支付的佣金。目前,lead的运作方式主要有两种:正式和非正式。常规的操作方法是利用网站、SEO等相关页面进行推广,通过主动营销推广,获取更多的访客,引导访客完成任务。优点:定期稳定的收入。缺点:见效慢,前期资金大,技术含量高。非正规操作法,也叫EMU,本质上是通过欺骗的方式完成广告主的任务,从而获得佣金。当然,要达到这种效果需要很

利用excel求特定条件下的最大/小值(maxif/minif)_Smilecoc的博客-程序员秘密

欢迎关注我的公众号:Romi的杂货铺在Excel中有sumif,countif等函数可以实现求特定条件下数值的加总和计数,那么如何在一个或多个条件下求出此时的最大值或者最小值呢?其实sumif函数和countif函数实际上都是可以由sum/count+if函数通过数组实现的,所以求特定条件下的最大/小值也可以使用同样的方法。同时maxifs函数已经可以在office365和office 201...

[解决方案] Java打成jar包找不到资源文件_classloader 加载 .jar!/boot-inf/lib/xx.jar 报错_Blanchedingding的博客-程序员秘密

文件放在resources文件夹下,打成jar包后会出现在BOOT_INF/classes/xx.xx下;文件路径使用绝对路径&quot;/xx.xx&quot;,用classLoader加载url和创建InputStream:URL fileURL=this.getClass().getResource(&quot;/xx.xx&quot;);InputStream is=this.getClass().getResourceA...

推荐文章

热门文章

相关标签