deque 和 vector 的最大差异?
一在于 deque 允许常数时间内对头端进行元素插入和删除操作。
二在于 deque 没有容量的概念,因为它是动态的以分段的连续空间组合而成,随时可以增加一段新的空间并链接起来,换句话说,像 vector 那样“因旧空间不足而重新分配一块更大的空间,然后再复制元素,释放空间”这样的操作不会发生在 deque 身上,也因此deque 没有必要提供所谓的空间保留功能。
特性总结:
 双端插入和删除元素效率较高.
 指定位置插入也会导致数据元素移动,降低效率.
 可随机存取,效率高.
经验之谈 : deque 是分段连续的内存空间,通过中控器维持一种连续内存空间的状态,其实现复杂性要大于 vector queue stack 等容器,其迭代器的实现也更加复杂,在需要对deque 容器元素进行排序的时候,建议先将 deque 容器中数据数据元素拷贝到 vector 容器中,对 vector 进行排序,然后再将排序完成的数据拷贝回 deque 容器。
  1. #include <iostream>
  2. #include <deque>
  3. using namespace std;
  4.  
  5. void PrintDeque(deque<int>& d)
  6. {
  7. for (deque<int>::iterator it = d.begin(); it != d.end(); it++)
  8. {
  9. cout << *it << " ";
  10. }
  11. cout << endl;
  12. }
  13.  
  14. // deque 初始化
  15. // deque<T> deqT;//默认构造形式
  16. // deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。
  17. // deque(n, elem);//构造函数将 n 个 elem 拷贝给本身。
  18. // deque(const deque &deq);//拷贝构造函数。
  19. void test01()
  20. {
  21. deque<int> d1;
  22. deque<int> d2(, );
  23. deque<int> d3(d2.begin(), d2.end());
  24. deque<int> d4(d3);
  25. PrintDeque(d1);
  26. PrintDeque(d2);
  27. PrintDeque(d3);
  28. PrintDeque(d4);
  29. cout << "------------------" << endl;
  30. }
  31.  
  32. // 赋值 大小操作
  33. // assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
  34. // assign(n, elem);//将 n 个 elem 拷贝赋值给本身。
  35. // deque& operator=(const deque &deq); //重载等号操作符
  36. // swap(deq);// 将 deq 与本身的元素互换
  37.  
  38. // deque.size();//返回容器中元素的个数
  39. // deque.empty();//判断容器是否为空
  40. // deque.resize(num);//重新指定容器的长度为 num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
  41. // deque.resize(num, elem); //重新指定容器的长度为 num,若容器变长,则以 elem 值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。
  42. void test02()
  43. {
  44. deque<int> d1;
  45. deque<int> d2;
  46. deque<int> d3;
  47. d1.assign(, );
  48. d2.assign(d1.begin(), d1.end()); // 迭代器指定区间赋值
  49. d3 = d2; // 等号赋值
  50. PrintDeque(d1);
  51. PrintDeque(d2);
  52. PrintDeque(d3);
  53. d1.swap(d2); // 交换两个空间元素
  54. if (d1.empty())
  55. {
  56. cout << "空!" << endl;
  57. }
  58. else
  59. {
  60. cout << "size: " << d1.size() << endl;
  61. }
  62. d1.resize(); // 10个元素,后五个元素扔掉
  63. cout << "------------------" << endl;
  64. }
  65.  
  66. // deque 容器插入和删除
  67. // push_back(elem);//在容器尾部添加一个数据
  68. // push_front(elem);//在容器头部插入一个数据
  69. // pop_back();//删除容器最后一个数据
  70. // pop_front();//删除容器第一个数据
  71. void test03()
  72. {
  73. deque<int> d1;
  74. d1.push_back();
  75. d1.push_front();
  76. d1.push_back();
  77. d1.push_back();
  78. d1.push_front();
  79. PrintDeque(d1);
  80. int val = d1.front(); // 拿到被删除的数据
  81. d1.pop_front();
  82. PrintDeque(d1);
  83. val = d1.back();
  84. d1.pop_back();
  85. PrintDeque(d1);
  86. cout << "------------------" << endl;
  87. }
  88.  
  89. // deque 数据存取
  90. // at(idx);//返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range。
  91. // operator[];//返回索引 idx 所指的数据,如果 idx 越界,不抛出异常,直接出错。
  92. // front();//返回第一个数据。
  93. // back();//返回最后一个数据
  94.  
  95. // deque 插入操作
  96. // insert(pos, elem);//在 pos 位置插入一个 elem 元素的拷贝,返回新数据的位置。
  97. // insert(pos, n, elem);//在 pos 位置插入 n 个 elem 数据,无返回值。
  98. // insert(pos, beg, end);//在 pos 位置插入[beg,end)区间的数据,无返回值。
  99.  
  100. int main()
  101. {
  102. test01();
  103. test02();
  104. test03();
  105. getchar();
  106. return ;
  107. }

C++ STL 之 deque的更多相关文章

  1. 带你深入理解STL之Deque容器

    在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操 ...

  2. STL之deque双向队列

    deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,提供随机访问,deque在接口上和vector非常相似,下面列出deque的常用成员函数: Table 6.9. C ...

  3. STL中deque

    以下学习一下STL中另一种序列容器——deque. deque表示double-ended queue,即双向队列,deque是通过作为动态数组的方式实现的,这样可以在两端插入元素.因此,deque可 ...

  4. STL之Deque容器

    1.Deque容器 1)deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. 2)deque在接口上和vect ...

  5. STL中deque 解析

    一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是 ...

  6. [转]STL之deque容器详解

    Deque 容器 deque容器是C++标准模版库(STL,Standard Template Library)中的部分内容.deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中 ...

  7. STL之Deque的使用方法

    STL 中类 stack 实现了一个栈 1)push 能够插入元素 2)pop 移除栈顶元素 使用的时候,需要包含头文件 #include <stack>,stack 被声明如下: nam ...

  8. STL之deque

    deque是一种优化了的,对序列两段进行添加和删除操作的基本序列容器.它允许较为快速的随机访问,但它不像vector把所有对象保存在一块连续的内存块,而是采用多个连续的存储块.向deque两段添加或删 ...

  9. STL之deque用法详解

    C++ Deque(双向队列): Deque是一种优化了的.对序列两端元素进行添加和删除操作的基本序列容器.它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用 ...

  10. 【STL】-deque的用法

    初始化: #include <deque> deque<float> fdeque; 算法: fdeque.push_front(f); fdeque.push_back(f) ...

随机推荐

  1. Dart 语法中文在线学习网址收藏

    为了学习flutter UI框架,必须先学好dart语言,故收藏了有关 Dart 语法中文在线学习网址 http://dart.goodev.org/guides/language/language- ...

  2. 阶段5 3.微服务项目【学成在线】_day01 搭建环境 CMS服务端开发_01-项目概述-功能构架-项目背景

    这个就是博学谷下的 在线教育平台

  3. shell编程(2)

    一.变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值即可,shell变量也遵循这个规则. 在Bash shell 中,每一个 ...

  4. PAT 甲级 1026 Table Tennis (30 分)(坑点很多,逻辑较复杂,做了1天)

    1026 Table Tennis (30 分)   A table tennis club has N tables available to the public. The tables are ...

  5. c++后台开发面试常见知识点总结(一)c++基础

    指针和引用的区别 extern,const,static,volatile关键字 #define 和const的区别 关于typedef和#define; C++程序中内存使用情况分析(堆和栈的区别) ...

  6. Python生成随机数组的方法小结

    Python生成随机数组的方法小结 本文实例讲述了Python生成随机数组的方法.分享给大家供大家参考,具体如下: 研究排序问题的时候常常需要生成随机数组来验证自己排序算法的正确性和性能,今天把Pyt ...

  7. JAVA 基础编程练习题21 【程序 21 求阶乘】

    21 [程序 21 求阶乘] 题目:求 1+2!+3!+...+20!的和 程序分析:此程序只是把累加变成了累乘. package cskaoyan; public class cskaoyan21 ...

  8. xampp 启动mysql 显示busy

    1.端口被占用问题:2.默认3306端口并没有被占用:3.删除xampp\mysql\data\下的ibdata1再重启:4.没装其他mysql.

  9. Linux中nohup和&的用法和区别

    在Linux执行任务时,如果键入Ctrl+C退出进行其他任务或者关闭当前session 当前任务就会终止 要想不让进程停止或者让进程在后台运行,就需要一些命令,nohup和&就是一种非常好的方 ...

  10. Linux selinux 防火墙

    cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take ...