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) 构造 & 头尾添加删除元素的更多相关文章

  1. jQuery添加删除元素

    $(document).ready(function () { $('#radioExtranet').on('click', function () { showProjectInformation ...

  2. 分别使用原生js和jQuery添加/删除元素的class属性

    一.原生js添加/删除元素的class属性: <!-- span元素原有class = "test" --> <span class="test&quo ...

  3. STL容器及算法题:删除奇数的QQ号

    最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...

  4. Java ArrayList正确循环添加删除元素方法及分析

    在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 一.foreach循环 foreach循环(Foreach loop)是计算机编程 ...

  5. 集合遍历过程iterator, 添加删除元素报异常

    list  set  遍历过程中添加或者删除元素,报异常. 使用iterator 也会报异常 ConcurrentModificationException remove只能用迭代器的remove,而 ...

  6. JS中的数组,添加删除元素,判断是否存在一个值的方法总结

    一.添加元素: 1:在最后添加,返回数组长度:arr.push(...); 2:在最前面添加,返回数组长度:arr.unshift(...); 3:在指定位置添加,没有返回值:arr[i] = xxx ...

  7. js添加删除元素内容

    <body> <div id="div" style="background: yellow;width:200px;height:200px;&quo ...

  8. JavaScript HTML DOM---遗漏知识再整理(向html添加/删除元素,改变内容和css)

    1.  HTML DOM 改变 HTML 内容:(HTML DOM 允许 JavaScript 改变 HTML 元素的内容.) (1)改变 HTML 输出流 在 JavaScript 中,docume ...

  9. js添加删除元素

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

随机推荐

  1. 流量控制--5.Classless Queuing Disciplines (qdiscs)

    Classless Queuing Disciplines (qdiscs) 本文涉及的队列规则(Qdisc)都可以作为接口上的主qdisc,或作为一个classful qdiscs的叶子类.这些是L ...

  2. MyBatis 使用手册

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBatis 可以通过简单的 XM ...

  3. day02-多任务(进程和协程)

    一.多任务的概念       简单地说,就是操作系统可以同时运行多个任务.打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行.还有很多任务 ...

  4. bWAPP----HTML Injection - Reflected (POST)

    bWAPP--low--HTML Injection - Reflected (POST) 只不过是把传递方式换成post, 防护的三个级别和内容与GET相同 1 function htmli($da ...

  5. 《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机

    说在前面:前几天,公众号不是给大家推送了第二篇关于决策树的文章嘛.阅读过的读者应该会发现,在最后排版已经有点乱套了.真的很抱歉,也不知道咋回事,到了后期Markdown格式文件的内容就解析出现问题了, ...

  6. centos8 连接wifi

    从官网下载的6G多的iso安装后 #ifconfig -a 如下 enp3s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500l ...

  7. java面试官最爱问的垃圾回收机制,这位阿里P7大佬分析的属实到位

    前言 JVM 内存模型一共包括三个部分: 堆 ( Java代码可及的 Java堆 和 JVM自身使用的方法区). 栈 ( 服务Java方法的虚拟机栈 和 服务Native方法的本地方法栈 ) 保证程序 ...

  8. 巧妙运用Camtasia 旅行Vlog轻松get

    旅行时,除了要欣赏当地的美丽风景.享受当地美食外,当然还要将旅行中的各种小细节记录下来.以前我们可能更多地使用相机拍照,现在呢,越来越多的人采用视频拍摄的方式制作Vlog.这种兼具影像与叙事的视频表现 ...

  9. jmeter简单的压力测试

    Jmeter是一个非常好用的压力测试工具.  Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好.相比LR来说操作简单方便,关键是免费,基于JAVA开发,所以需 ...

  10. laradock使用问题汇总

    laradock简介 一套完整的基于Docker的PHP开发环境.包含了预先打包的Docker镜像,所有预先配置都是为了提供一个完美的PHP开发环境(中文文档).PS: 不是最新版的 windows1 ...