deque

STL之deque容器详解

Deque 容器

deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容。deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是,deque还支持从开始端插入数据:push_front()。

使用deque容器之前必须加上<deque>头文件:#include<deuqe>;

       deque属于std命名域的内容,因此需要通过命名限定:using std::deque;也可以直接使用全局的命名空间方式:using namespace std;

 

构造函数

  deque<Elem> c 创建一个空的deque

  deque<Elem> c1(c2) 复制一个deque。

  deque<Elem> c(n) 创建一个deque,含有n个数据,数据均已缺省构造产生。

  deque<Elem> c(n, elem) 创建一个含有n个elem拷贝的deque。

  deque<Elem> c(beg,end) 创建一个以[beg;end)区间的deque。

  ~deque<Elem>() 销毁所有数据,释放内存。

 

成员函数

c.begin()返回指向第一个元素的迭代器

c.end()返回指向最后一个元素下一个位置的迭代器

1     deque<int> d {1,2,3,4,5};
2     deque<int>::iterator it;
3     for(it=d.begin();it!=d.end();it++){
4         cout << *it << " ";
5     }
6     cout << endl;

c.rbegin()返回指向反向队列的第一个元素的迭代器(即原队列的最后一个元素)

c.rend()返回指向反向队列的最后一个元素的下一个位置(即原队列的第一个元素的前一个位置)

1     deque<int> d {1,2,3,4,5};
2     deque<int>::reverse_iterator it;
3     for(it=d.rbegin();it!=d.rend();it++){
4         cout << *it << " ";
5     }
6     cout << endl;

operator=赋值运算符重载

复制代码
1     deque<int> d1 {1,2,3,4,5},d2;
2     d2 = d1;
3     deque<int>::iterator it;
4     for(it=d2.begin();it!=d2.end();it++){
5         cout << *it << " ";
6     }
7     cout << endl;
复制代码

c.assign(n,num)将n个num拷贝复制到容器c

c.assign(beg,end)将[beg,end)区间的数据拷贝复制到容器c

复制代码
 1     deque<int> d1 {1,2,3,4,5},d2;
 2     d2.assign(2, 8);
 3     deque<int>::iterator it;
 4     cout << "d2.assign(n,num):";
 5     for(it=d2.begin();it!=d2.end();it++){
 6         cout << *it << " ";
 7     }
 8     d2.assign(d1.begin(), d1.begin()+3);
 9     cout << "d2.assign(beg,end):";
10     for(it=d2.begin();it!=d2.end();it++){
11         cout << *it << " ";
12     }
13     cout << endl;
复制代码

c.at(pos)返回索引为pos的位置的元素,会执行边界检查,如果越界抛出out_of_range异常

1     deque<int> d {1,2,3,4,5};
2     cout << "d.at(pos):" << d.at(2);
3     return 0;

c.operator[]下标运算符重载

1     deque<int> d {1,2,3,4,5};
2     cout << "d[2]:" << d[2];
3     return 0;

c.empty()判断c容器是否为空

复制代码
1     deque<int> d {1,2,3,4,5};
2     if(!d.empty()){
3         cout << "d is not empty!" << endl;
4     }else{
5         cout << "d is empty!" << endl;
6     }
7     return 0;
复制代码

c.front()返回c容器的第一个元素

c.back()返回c容器的最后一个元素

1     deque<int> d {1,2,3,4,5};
2     if(!d.empty()){
3         cout << "d.front():" << d.front() << endl;
4         cout << "d.back(): " << d.back() << endl;
5     }

c.size()返回c容器中实际拥有的元素个数

1     deque<int> d {1,2,3,4,5};
2     cout << "d.size():" << d.size() << endl;
3     return 0;

c.max_size()返回c容器可能存放元素的最大数量

1     deque<int> d {1,2,3,4,5};
2     cout << "d.max_size():" << d.max_size() << endl;
3     return 0;

c.clear()清除c容器中拥有的所有元素

复制代码
 1     deque<int> d {1,2,3,4,5};
 2     deque<int>::iterator it;
 3     cout << "clear before:" ;
 4     for(it=d.begin();it!=d.end();it++){
 5         cout << *it << " ";
 6     }
 7     cout << endl;
 8     d.clear();
 9     cout << "clear after:" ;
10     for(it=d.begin();it!=d.end();it++){
11         cout << *it << " ";
12     }
13     cout << endl;
复制代码

c.insert(pos,num)在pos位置插入元素num

c.insert(pos,n,num)在pos位置插入n个元素num

c.insert(pos,beg,end)在pos位置插入区间为[beg,end)的元素

复制代码
 1     deque<int> d {1,2,3,4,5};
 2     deque<int>::iterator it;
 3     cout << "insert before:" ;
 4     for(it=d.begin();it!=d.end();it++){
 5         cout << *it << " ";
 6     }
 7     cout << endl;
 8     d.insert(d.end(),22);
 9     d.insert(d.end(), 3,88);
10     int a[5] = {1,2,3,4,5};
11     d.insert(d.begin(),a,a+3);
12     cout << "insert after:" ;
13     for(it=d.begin();it!=d.end();it++){
14         cout << *it << " ";
15     }
16     cout << endl;
复制代码

c.erase(pos)删除pos位置的元素c.erase(beg,end)删除区间为[beg,end)的元素

c.erase(beg,end)删除区间为[beg,end)之间的元素

复制代码
 1     deque<int> d {1,2,3,4,5};
 2     d.erase(d.begin());
 3     deque<int>::iterator it;
 4     cout << "erase(pos) after:" ;
 5     for(it=d.begin();it!=d.end();it++){
 6         cout << *it << " ";
 7     }
 8     cout << endl;
 9     d.erase(d.begin(), d.begin()+3);
10     cout << "erase(beg,end) after:" ;
11     for(it=d.begin();it!=d.end();it++){
12         cout << *it << " ";
13     }
14     cout << endl;
复制代码

c.push_back(num)在末尾位置插入元素

c.pop_back()删除末尾位置的元素

c.push_front(num)在开头位置插入元素

c.pop_front()删除开头位置的元素

复制代码
 1     deque<int> d {1,2,3,4,5};
 2     d.push_back(10);
 3     deque<int>::iterator it;
 4     cout << "push_back(num):" ;
 5     for(it=d.begin();it!=d.end();it++){
 6             cout << *it << " ";
 7     }
 8     cout << endl;
 9     
10     d.pop_back();
11     cout << "pop_back(num):" ;
12     for(it=d.begin();it!=d.end();it++){
13         cout << *it << " ";
14     }
15     cout << endl;
16     
17     d.push_front(10);
18     cout << "push_front(num):" ;
19     for(it=d.begin();it!=d.end();it++){
20         cout << *it << " ";
21     }
22     cout << endl;
23     
24     d.pop_front();
25     cout << "pop_front(num):" ;
26     for(it=d.begin();it!=d.end();it++){
27         cout << *it << " ";
28     }
29     cout << endl;
30     return 0;
复制代码

 

c.resize(num)从新定义容器的大小

复制代码
 1     deque<int> d {1,2,3,4,5};
 2     cout << "d.size():" << d.size() << endl;
 3     d.resize(d.size()+5);
 4     cout << "d.resize() after:" << d.size() <<endl;
 5     deque<int>::iterator it;
 6     cout << "resize() after:" ;
 7     for(it=d.begin();it!=d.end();it++){
 8     cout << *it << " ";
 9     }
10     cout << endl;
复制代码

c1.swap(c2)交换容器c1,c2;

swap(c1,c2)同上。

复制代码
 1     deque<int> d1 {1,2,3,4,5},d2,d3;
 2     d1.swap(d2);
 3     deque<int>::iterator it;
 4     cout << "d1 swap after:" ;
 5     for(it=d1.begin();it!=d1.end();it++){
 6         cout << *it << " ";
 7     }
 8     cout << endl;
 9     cout << "d2 swap after:" ;
10     for(it=d2.begin();it!=d2.end();it++){
11         cout << *it << " ";
12     }
13     cout << endl;
14     
15     swap(d3,d2);
16     cout << "d3 swap after:" ;
17     for(it=d3.begin();it!=d3.end();it++){
18         cout << *it << " ";
19     }
20     cout << endl;
复制代码

 

 

重载运算符

operator==

operator!=

operator<

operator<=

operator>

operator>=

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

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

相关文章

【转载保存】MySQL时间、字符串、时间戳互相转换

时间转字符串 select date_format(now(), ‘%Y-%m-%d %H:%i:%s’); 结果&#xff1a;2018-05-02 20:24:10 时间转时间戳 select unix_timestamp(now()); 结果&#xff1a;1525263383 字符串转时间 select str_to_date(‘2018-05-02’, ‘%Y-%m-%d %H’); 结果&#xff1a;20…

RMQ算法,求区间最值

poj 3264 Balanced Lineup 2016-07-27 11:15 49人阅读 评论(0) 收藏 举报分类&#xff1a;RMQ(Range MinimumMaximum Quer)&#xff08;4&#xff09; Balanced LineupTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 45854 Accepted: 21536Case Time Limit: 2000M…

【转载】向量空间模型VSM及余弦计算

向量空间模型VSM及余弦计算 向量空间模型的基本思想是把文档简化为以特征项&#xff08;关键词&#xff09;的权重为分量的N维向量表示。 这个模型假设词与词间不相关&#xff08;这个前提造成这个模型无法进行语义相关的判断&#xff0c;向量空间模型的缺点在于关键词之间的…

机器学习入门学习视频和书籍(笔记保存)

我娜姐推荐的资料和我要看的资料记录下&#xff1a; 吴恩达151课时:https://study.163.com/course/courseLearn.htm?courseId1004570029#/learn/video?lessonId1049052745&courseId1004570029机器学习书籍&#xff1a;《Machine Learning in Action》,Peter Harington&a…

【美文保存】nosql数据库对比以及如何巧妙利用redis来提高效率?

1. MySqlMemcached架构的问题 实际MySQL是适合进行海量数据存储的&#xff0c;通过Memcached将热点数据加载到cache&#xff0c;加速访问&#xff0c;很多公司都曾经使用过这样的架构&#xff0c;但随着业务数据量的不断增加&#xff0c;和访问量的持续增长&#xff0c;我们遇…

嵌入式开发——DMA外设到内存

学习目标 加强理解DMA数据传输过程加强掌握DMA的初始化流程掌握DMA数据表查询理解源和目标的配置理解数据传输特点能够动态配置源数据学习内容 需求 uint8_t data; 串口接收(&data);data有数据了 实现串口的数据接收,要求采用dma的方式。 数据交互流程 CPU配置好DMA外…

系统设计类问题

如果让你设计一个秒杀系统&#xff0c;你会如何设计&#xff1f; Redis是一个分布式缓存系统&#xff0c;支持多种数据结构&#xff0c;我们可以利用Redis轻松实现一个强大的秒杀系统。 我们可以采用Redis 最简单的key-value数据结构&#xff0c;用一个原子类型的变量值(Atomic…

B - Ada and Queue

Ada the Ladybug has many things to do. She puts them into her queue. Anyway she is very indecisive, so sometime she uses the top, sometime the back and sometime she decides to reverses it. Input The first line consists of 1 ≤ Q ≤ 106, number of queries…

一种基于邻域的聚类算法

基本概念&#xff1a; 给定数据集D {d1&#xff0c;d2 ,.. &#xff0c;dn}&#xff0c;p和q是D中的两个任意对象。我们使用欧氏距离来评估p和q之间的距离&#xff0c;表示为 dist&#xff08;p&#xff0c;q&#xff09;。 我们将首先给出k-最近邻集合和反向的定义k-最近邻集…

博弈之威佐夫

博弈之威佐夫博弈详解 标签&#xff1a; 数学博弈游戏威佐夫algorithm2014-03-21 10:40 5330人阅读 评论(1) 收藏 举报分类&#xff1a;博弈&#xff08;6&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 威佐夫博弈是博弈中的另一个经…

Maven报错Missing artifact jdk.tools:jdk.tools:jar:1.7

https://blog.csdn.net/u013281331/article/details/40824707

机器学习会议总结1

2017.06.10506实验室会议总结&#xff1a;今天是机器学习第一次正式的开会&#xff0c;即兴奋又慌张&#xff0c;怕自己所学的东西达不到要求。实验室每个人的学习情况及工作情况如下&#xff1a;首先介绍的当然是我们唯有的学长元智&#xff0c;学长元智主要是讲了怎样学习&am…

前缀树和后缀树

Trie树的应用: 除了本文引言处所述的问题能应用Trie树解决之外&#xff0c;Trie树还能解决下述问题&#xff08;节选自此文&#xff1a;海量数据处理面试题集锦与Bit-map详解&#xff09;&#xff1a; 3、有一个1G大小的一个文件&#xff0c;里面每一行是一个词&#xff0c;词的…

学长启蒙

2017.06.20506实验室家才学长课堂总结&#xff1a;第一次正式听家才学长的课堂&#xff0c;课堂主要目的学长凭自己的经验和丰富的知识带领我们入门机器学习&#xff0c;认识机器学习&#xff0c;学习机器学习。 课堂第一项&#xff0c;首先为方便与学长交流&#xff0c;认识&a…

A*算法启发式搜索

最短路径算法&#xff1a; A*算法擅长解决静态路径中最短距离问题&#xff0c;而又不同于Dijkstra算法和Floyd算法&#xff0c;该算法综合了BFS和Dijkstra算法优点&#xff1a;在进行启发式搜索提高算法效率的同时&#xff0c;可以保证找到一条最优路径(基于评估函数&#xff0…

基于维特比算法的概率路径

简介&#xff1a; 维特比算法(Vieterbi algorithm)是一种动态规划算法&#xff0c;探索出很多预测天气的方法&#xff0c;这种基于经验的预测方式&#xff0c;是一种基于历史数据的概率模型。 思想 维特比算法的思想是假设某一个数据的当前状态是依赖于它的前一个状态&#…

Python的Pexpect库

Pexpect 是一个用来启动子程序并对其进行自动控制的纯 Python 模块。 Pexpect 可以用来和像 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。本文主要是针对ssh远程登录&#xff0c;然后执行简单的新建文件夹与拷贝任务Pexpect 的安装&#xff1a;下载&#xff1a;https:…

k-shingles和MinHash优秀文章保存

minhash原理解释&#xff1a;https://www.cnblogs.com/sddai/p/6110704.html k-shingles和minhash使用原理&#xff1a;https://blog.csdn.net/aspirinvagrant/article/details/41281101 代码java实现&#xff1a;https://blog.csdn.net/remoa_dengqinyi/article/details/728…

Python 数据库连接

#!/usr/bin/env python #-*-coding:utf-8-*- #异常处理&#xff0c;with的使用&#xff0c; class Mycontex(object):def __init__(self,name):self.namenamedef __enter__(self):print("__enter__")return selfdef do_self(self):print(do_self)def __exit__(self,e…

中文分词测试语句

研究生命科学研究生命令本科生我从马上下来我马上下来北京大学生喝进口红酒在北京大学生活区喝进口红酒从小学电脑从小学毕业美军中将竟公然说新建地铁中将禁止商业摊点这块地面积还真不小地面积了厚厚的雪让我们以爱心和平等来对待动物阿美首脑会议将讨论巴以和平等问题锌合金…