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. JWT鉴权

    一.HTTP基本认证 Basic Authentication--当浏览器访问使用基本认证的网站的时候, 浏览器会提示你输入用户名和密码. http auth的过程: 客户端发送http请求 服务器发 ...

  2. Mesos Marathon能做什么?理念是什么?(转)

    Mesos功能和特点? Mesos是如何实现整个数据中心统一管理的呢?核心的概念就是资源两级供给和作业两级调度.先说说从下而上的资源两级供给吧. 在Mesos集群中,资源的供应方都来自Mesos Sl ...

  3. HDU100题简要题解(2050~2059)

    HDU2050 折线分割平面 题目链接 Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以 ...

  4. 简单实用的Boom 3D进阶使用教程分享

    对于初学者来说,简单体验Boom 3D的3D环绕音效,就可以通过普通耳机享受到高品质耳机的动人音效.而对于进阶者来说,Boom 3D灵活的预设功能,能让其享受到自由调整均衡器.低音的乐趣. 图1:Bo ...

  5. 关于Vegas制作黑白负片爆闪效果的教程分享

    作为一款视频剪辑软件,Vegas界面简洁,操作难度低,比较容易上手,今天小编就带大家了解Vegas制作超级炫酷的黑白负片爆闪效果的操作过程. 1.导入视频 首先,双击打开视频剪辑软件Vegas Pro ...

  6. H5系列之常用的语义元素

    H5添加了几个新标签,带有语义化的标签,像我们的div 和 span 标签,你说他两能干嘛呢, 好像他两什么事都能干.举个例子,你家里的房子,有几个房间,如果不分房间的话,是不是你 今天睡这里,明天睡 ...

  7. 用大白话讲大数据HBase,老刘真的很用心(1)

    老刘今天复习HBase知识发现很多资料都没有把概念说清楚,有很多专业名词一笔带过没有解释.比如这个框架高性能.高可用,那什么是高性能高可用?怎么实现的高性能高可用?没说! 如果面试官听了你说的,会有什 ...

  8. leetcode 108 和leetcode 109 II

    //感想:没啥上篇写完了 //思路:对于这道题109来说,就是数组变成了链表,其他没有变,我觉得非常不解,因为我想到的依旧是找中点,用快慢指针来找, 找到以后将链表分成两半,继续递归的去找,我就觉得这 ...

  9. iOS gif图显示问题

    问题 有时候需要显示gif动态图,让界面更加的绚丽,但是iOS默认只支持png,gpg图片.那么如何才能显示gif图呢? 解决方式 添加框架 CoreGraphics.framework ImageI ...

  10. Codeforces Round #661 (Div. 3) D、E1 题解

    D. Binary String To Subsequences #贪心 #构造 题目链接 题意 给定一个\(01\)串\(s\),完全分割成若干子序列(注意,不要混淆子串与子序列的概念),其中的子序 ...