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. Java(7)泛型

    目录 一.泛型概述 1.什么是泛型 2.为什么用泛型 3.在集合中使用泛型 二.自定义泛型结构 1.泛型类.接口 2.泛型方法 三.举例泛型类和泛型方法的使用场景 1.泛型类举例: 2.泛型方法举例 ...

  2. elasticsearch集群安装+安全验证+kibana安装

    准备环境 启动4个centos容器, 并暴露相对应端口 (我的本机ip为172.16.1.236,以下涉及到的地方需要修改为自己的ip) node_name ip http port transpor ...

  3. SSL加密原理

    对称加密算法 对称加密算法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密. 非对称加密算法 非对称加密算法(RSA)是内容加密的一类算法,它有两个秘钥:公钥与私钥 ...

  4. 深度解析:如何替换掉代码中的ifelse,我女朋友看完都会了!

    平时我们在写代码时,需要针对不同情况处理不同的业务逻辑,用得最多的就是if和else. 但是如果情况太多,就会出现一大堆的"if else",这就是为什么很多遗留系统中,一个函数可 ...

  5. .Net orm 开源项目 FreeSql 2.0.0(满意的答卷)

    写在开头 2018年11月头脑发热到今天,一晃已经两年,当初从舒服区走向一个巨大的坑,回头一看后背一凉. 两年时间从无到有,经历数不清的日夜奋斗(有人问花了多长时间投入,答案:全职x2 + 两年无休息 ...

  6. PHP 获取本周、今日、本月的起始时间戳

    当前周的开始时间(周一)$begintime = mktime(0, 0, 0, date('m'), (date('d') - (date('w')>0 ? date('w') : 7) + ...

  7. vue springboot利用easypoi实现简单导出

    vue springboot利用easypoi实现简单导出 前言 一.easypoi是什么? 二.使用步骤 1.传送门 2.前端vue 3.后端springboot 3.1编写实体类(我这里是dto, ...

  8. C语言新手入门

    include<stdio.h> int main() { //输入一个数 输出它的反序列 c int a,b=0; scanf("%d",&a);//输入一个 ...

  9. JVM类加载机制详解,建议看这一篇就够了,深入浅出总结的十分详细!

    类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 类加载的时机 遇到new(比如n ...

  10. 没有wget Loading mirror speeds from cached hostfile

    问题描述 新装的系统,没有一些常用命令的rpm包.使用ifconfig,报错 Loading mirror speeds from cached hostfile解决 网上解决方案是换数据下载源,但是 ...