STL——容器(deque) 构造 & 头尾添加删除元素
1.deque容器概念
deque是“double-ended queue”的缩写,和vector一样都是STL的容器,唯一不同的是:deque是双端数组,而vector是单端的。
、
Deque 特点:
- deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
- deque可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法)
- deque头部和尾部添加或移除元素都非常快速, 但是在中部安插元素或移除元素比较费时。
使用时,包含头文件:#include <deque>
2. deque 的无参构造与有参构造
deque 的用法与 vector 类似,无参构造时不会分配内存,可以用过 push_back() 在后方添加元素,可以通过迭代器或指定参数对 deque 的空间进行赋值
1 #include <iostream>
2 #include <deque>
3
4 using namespace std;
5
6 class student
7 {
8 public:
9 student(int age)
10 {
11 this->age = age;
12 cout << "调用构造函数" << endl;
13 }
14 int age;
15 };
16
17
18 int main()
19 {
20 //无参构造,这样的 deque 没有分配内存
21 deque<int> deqInt;
22 deque<float> deqFloat;
23 deque<student> deqStu;
24 deque<student*> deqStuP;
25
26 deqInt.push_back(111); //deqInt 尾部插入1个元素
27 deqInt.push_back(222); //deqInt 尾部插入1个元素
28 deqInt.push_back(333); //deqInt 尾部插入1个元素
29 deqFloat.push_back(0.1f);
30 deqStu.push_back(student(18));
31
32 //带参构造
33 //方式一:用迭代器给定区间
34 deque<int> deqInt_A(deqInt.begin(),deqInt.end());
35 cout << "deqInt_A 中的元素为:" << endl;
36 for (int i = 0; i < deqInt_A.size(); i++)
37 {
38 cout << deqInt_A[i] << endl;
39 }
40
41 //方式二:指定n个元素进行拷贝 10 个 0
42 deque<int> deqInt_B(5, 0);
43 cout << "deqInt_B 中的元素为:" << endl;
44 for (int i = 0; i < deqInt_B.size(); i++)
45 {
46 cout << deqInt_B[i] << endl;
47 }
48
49 //方式三:拷贝构造
50 deque<int> deqInt_C(deqInt_B);
51
52 cout << "dequeInt_C 中的元素为:" << endl;
53 for (int i = 0; i < deqInt_C.size(); i++)
54 {
55 cout << deqInt_C[i] << endl;
56 }
57
58 return 0;
59 }
打印结果:

3. deque 的两端删除与插入,(头部插入和删除操作,是比 vector 多出来的功能)
1 #include <iostream>
2 #include <deque>
3
4 using namespace std;
5
6 int main()
7 {
8 int Test[] = { 111,222 };
9 deque<int> deqInt_A(Test, Test + 2);
10 cout << "初始 deqInt_A 中的元素为:" << endl;
11 for (int i = 0; i < deqInt_A.size(); i++)
12 {
13 cout << deqInt_A[i] << endl;
14 }
15
16 printf("==================================\n");
17 //deque.push_back 尾部添加
18 cout << "使用 push_back 在尾部添加 333" << endl;
19 deqInt_A.push_back(333);
20 cout << "对 deqInt_A 进行遍历:" << endl;
21 for (int i = 0; i < deqInt_A.size(); i++)
22 {
23 cout << deqInt_A[i] << endl;
24 }
25
26 printf("==================================\n");
27 //deque.push_front 头部添加, 这个是比 vector 多出来的功能 容器的头部操作
28 cout << "使用 push_front 在头部添加 0" << endl;
29 deqInt_A.push_front(0);
30 cout << "对 deqInt_A 进行遍历:" << endl;
31 for (int i = 0; i < deqInt_A.size(); i++)
32 {
33 cout << deqInt_A[i] << endl;
34 }
35
36 printf("==================================\n");
37 //deque.pop_back 尾部删除
38 cout << "使用 pop_back 尾部删除" << endl;
39 deqInt_A.pop_back();
40 cout << "对 deqInt_A 进行遍历:" << endl;
41 for (int i = 0; i < deqInt_A.size(); i++)
42 {
43 cout << deqInt_A[i] << endl;
44 }
45
46 printf("==================================\n");
47 //deque.pop_front 头部删除, 这个是比 vector 多出来的功能 容器的头部操作
48 cout << "使用 pop_front 头部删除 " << endl;
49 deqInt_A.pop_front();
50 cout << "对 deqInt_A 进行遍历:" << endl;
51 for (int i = 0; i < deqInt_A.size(); i++)
52 {
53 cout << deqInt_A[i] << endl;
54 }
55
56 return 0;
57 }
打印结果:

========================================================================================================================
STL——容器(deque) 构造 & 头尾添加删除元素的更多相关文章
- jQuery添加删除元素
$(document).ready(function () { $('#radioExtranet').on('click', function () { showProjectInformation ...
- 分别使用原生js和jQuery添加/删除元素的class属性
一.原生js添加/删除元素的class属性: <!-- span元素原有class = "test" --> <span class="test&quo ...
- STL容器及算法题:删除奇数的QQ号
最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...
- Java ArrayList正确循环添加删除元素方法及分析
在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 一.foreach循环 foreach循环(Foreach loop)是计算机编程 ...
- 集合遍历过程iterator, 添加删除元素报异常
list set 遍历过程中添加或者删除元素,报异常. 使用iterator 也会报异常 ConcurrentModificationException remove只能用迭代器的remove,而 ...
- JS中的数组,添加删除元素,判断是否存在一个值的方法总结
一.添加元素: 1:在最后添加,返回数组长度:arr.push(...); 2:在最前面添加,返回数组长度:arr.unshift(...); 3:在指定位置添加,没有返回值:arr[i] = xxx ...
- js添加删除元素内容
<body> <div id="div" style="background: yellow;width:200px;height:200px;&quo ...
- JavaScript HTML DOM---遗漏知识再整理(向html添加/删除元素,改变内容和css)
1. HTML DOM 改变 HTML 内容:(HTML DOM 允许 JavaScript 改变 HTML 元素的内容.) (1)改变 HTML 输出流 在 JavaScript 中,docume ...
- js添加删除元素
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
随机推荐
- 攻防世界-Web_php_include (四种解法)
攻防世界-Web_php_include (考察的是文件包含) 打开页面是这样一段代码从代码中得知page中带有php://的都会被替换成空 str_replace()以其他字符替换字符串中的一些 ...
- 消灭又臭又长的if-else
背景 由于目前工作岗位的原因,项目还是09年建立的,历史遗留问题也比较多,加上开发规范并不是很完善,项目中有的单个方法达到成百上千行,if-else更是连续写十几个也不累. 作为强迫症真的受不了,另一 ...
- 细说FL Studio中的Wasp合成器功能
FL Studio 简称FL,因其Logo像水果,故国人亲切的叫他"水果"本章节采用图文结合的方式给大家讲解FL Studio中的Wasp合成器功能.感兴趣的朋友可以一起来交流哦. ...
- word边框+底纹
边框(段落和文字):先进行方框.阴影.三维等边框的选择,再进行样式.颜色.宽度设置,应用于:段落和文字:选项:距离正文上下左右距离. 页面边框(页.整篇文章等):先进行方框.阴影.三维等边框的选择,再 ...
- mysql常用语句列表
增 增加一张表 CREATE TABLE `table_name`( ... )ENGINE=InnoDB DEFAULT CHARSET=utf8; 增加记录 INSERT INTO `your_t ...
- phpstorm中去除sql的背景颜色
链接 http://www.oschina.net/question/1779564_2143393 这是去除黄线 再去除灰色线
- 墨振文档__UnitTest断言
unittest 断言方法 断言:自动化测试主要用于对流程来进行测试,断言就是自动化测试中的预期结果与实际结果的对比.
- Linux中influx数据库进程杀不掉,父进程为1
influx数据库一直杀不掉,父进程为1是个僵尸进程 后来我才发现,influx是运行运行状态 我只需要使用命令,停掉influx即可停止改进程
- Mat使用详解
背景 笔记中躺了很久的文章,今天用到Mat时发现之前写的内容还算清晰,分享出来; 如下所举例使用的dump文件是针对之前使用的ignite库溢出时的dump文件:关于ignite的概念此处不再叙述,本 ...
- 04_ Broadcast Receiver
Broadcast是广播,和Android内的事件一样,它可以发出一个广播(事件),注册了该广播接收器(事件监听器)的所有组件都会接收到该广播,从而调用自己的响应方法(事件响应处理). 下面将详细的阐 ...