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. mds的cpu占用问题分析以及解决办法

    前言 mds是ceph里面处理文件接口的组件,一旦使用文件系统,不可避免的会出现一种场景就是目录很多,目录里面的文件很多,而mds是一个单进程的组件,现在虽然有了muti mds,但稳定的使用的大部分 ...

  2. MFC的消息响应机制说明

    MFC的快速理解: 1.MFC的设计者们在设计MFC时,有一个主要的方向就是尽可能使得MFC的代码要小,速度尽可能快.为了这个方向,工程师们使用了许多技巧,主要表现在宏的运用上,实 现MFC的消息映射 ...

  3. 12种不宜使用的Javascript语法 ---阮一峰

    原文链接-阮一峰博客 1. == Javascript有两组相等运算符,一组是==和!=,另一组是===和!==.前者只比较值的相等,后者除了值以外,还比较类型是否相同. 请尽量不要使用前一组,永远只 ...

  4. 大数据和Hadoop平台介绍

    大数据和Hadoop平台介绍 定义 大数据是指其大小和复杂性无法通过现有常用的工具软件,以合理的成本,在可接受的时限内对其进行捕获.管理和处理的数据集.这些困难包括数据的收入.存储.搜索.共享.分析和 ...

  5. __METHOD__

  6. 【老孟Flutter】自定义文本步进组件

    交流 老孟Flutter博客(330个控件用法+实战入门系列文章):http://laomengit.com 欢迎加入Flutter交流群(微信:laomengit).关注公众号[老孟Flutter] ...

  7. ABAP CDS-介绍(ABAP CDS视图)

    前言 文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 在SAP发展到SAP HANA版本之后,SAP内部的技术正在快速地变化,SAP开发业务应用程序的方式已经发生了范式转变(根本 ...

  8. 轻松学编曲,论FL钢琴卷帘

    我们平时做视频时难免要用到音乐,市面上又有很多调音编曲软件,我们该如何选择呢?在这里笔者给大家推荐一款音乐制作软件FL Studio20,也就是业内知名度很高的水果音乐制作软件,这款音乐制作软件笔者用 ...

  9. 【PYTEST】第一章常用命令

    pytest入门 安装pytest 运行pytest pytest常用命令 1. 安装pytest pip install pytest 2. 运行pytest 2.1 pytest默认搜索当前目录下 ...

  10. 紧急发布用cherry-pick检出当前分支所有我的提交记录

    目录 背景 操作命令 cherry-pick git log Shell脚本 背景 公司接了个新项目,需在平台上增加几个新接口,问题是本来说是和平台一起迭代发布的时间提前了,但当前的代码都和其他开发人 ...