deque 和 vector 的最大差异?
一在于 deque 允许常数时间内对头端进行元素插入和删除操作。
二在于 deque 没有容量的概念,因为它是动态的以分段的连续空间组合而成,随时可以增加一段新的空间并链接起来,换句话说,像 vector 那样“因旧空间不足而重新分配一块更大的空间,然后再复制元素,释放空间”这样的操作不会发生在 deque 身上,也因此deque 没有必要提供所谓的空间保留功能。
特性总结:
 双端插入和删除元素效率较高.
 指定位置插入也会导致数据元素移动,降低效率.
 可随机存取,效率高.
经验之谈 : deque 是分段连续的内存空间,通过中控器维持一种连续内存空间的状态,其实现复杂性要大于 vector queue stack 等容器,其迭代器的实现也更加复杂,在需要对deque 容器元素进行排序的时候,建议先将 deque 容器中数据数据元素拷贝到 vector 容器中,对 vector 进行排序,然后再将排序完成的数据拷贝回 deque 容器。
 #include <iostream>
#include <deque>
using namespace std; void PrintDeque(deque<int>& d)
{
for (deque<int>::iterator it = d.begin(); it != d.end(); it++)
{
cout << *it << " ";
}
cout << endl;
} // deque 初始化
// deque<T> deqT;//默认构造形式
// deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。
// deque(n, elem);//构造函数将 n 个 elem 拷贝给本身。
// deque(const deque &deq);//拷贝构造函数。
void test01()
{
deque<int> d1;
deque<int> d2(, );
deque<int> d3(d2.begin(), d2.end());
deque<int> d4(d3);
PrintDeque(d1);
PrintDeque(d2);
PrintDeque(d3);
PrintDeque(d4);
cout << "------------------" << endl;
} // 赋值 大小操作
// assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
// assign(n, elem);//将 n 个 elem 拷贝赋值给本身。
// deque& operator=(const deque &deq); //重载等号操作符
// swap(deq);// 将 deq 与本身的元素互换 // deque.size();//返回容器中元素的个数
// deque.empty();//判断容器是否为空
// deque.resize(num);//重新指定容器的长度为 num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
// deque.resize(num, elem); //重新指定容器的长度为 num,若容器变长,则以 elem 值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。
void test02()
{
deque<int> d1;
deque<int> d2;
deque<int> d3;
d1.assign(, );
d2.assign(d1.begin(), d1.end()); // 迭代器指定区间赋值
d3 = d2; // 等号赋值
PrintDeque(d1);
PrintDeque(d2);
PrintDeque(d3);
d1.swap(d2); // 交换两个空间元素
if (d1.empty())
{
cout << "空!" << endl;
}
else
{
cout << "size: " << d1.size() << endl;
}
d1.resize(); // 10个元素,后五个元素扔掉
cout << "------------------" << endl;
} // deque 容器插入和删除
// push_back(elem);//在容器尾部添加一个数据
// push_front(elem);//在容器头部插入一个数据
// pop_back();//删除容器最后一个数据
// pop_front();//删除容器第一个数据
void test03()
{
deque<int> d1;
d1.push_back();
d1.push_front();
d1.push_back();
d1.push_back();
d1.push_front();
PrintDeque(d1);
int val = d1.front(); // 拿到被删除的数据
d1.pop_front();
PrintDeque(d1);
val = d1.back();
d1.pop_back();
PrintDeque(d1);
cout << "------------------" << endl;
} // deque 数据存取
// at(idx);//返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range。
// operator[];//返回索引 idx 所指的数据,如果 idx 越界,不抛出异常,直接出错。
// front();//返回第一个数据。
// back();//返回最后一个数据 // deque 插入操作
// insert(pos, elem);//在 pos 位置插入一个 elem 元素的拷贝,返回新数据的位置。
// insert(pos, n, elem);//在 pos 位置插入 n 个 elem 数据,无返回值。
// insert(pos, beg, end);//在 pos 位置插入[beg,end)区间的数据,无返回值。 int main()
{
test01();
test02();
test03();
getchar();
return ;
}

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. oracle启动过程2

    5个目标点(知识点)环境说明,连接实例,hash运算dbs目录文件解释参数文件解释启动过程三阶段实战演练 本次课程目标是讲解oracle实例的启动过程首先了解一下本次实验环境    之前已经创建好了一 ...

  2. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_15-页面静态化-模板管理-模板管理业务流程

    在视频教学的过程中,不会去做模板管理的模块 cms_template用来存储模板信息 cms_page 这一些课程页面用的是一个模板 模板的详情.templateFileId是模板的文件id 模板的文 ...

  3. 【403】COMP9024 Exercise

    Week 1 Exercises fiveDigit.c There is a 5-digit number that satisfies 4 * abcde = edcba, that is,whe ...

  4. 大数据(2)---HDFS集群搭建

    一.准备工作 1.准备几台机器,我这里使用VMware准备了四台机器,一个name node,三个data node. VMware安装虚拟机:https://www.cnblogs.com/niju ...

  5. windows下配置tomcat服务器的jvm内存大小的两种方式

    难得遇到一次java堆内存溢出(心里想着,终于可以来一次jvm性能优化了$$) 先看下报错信息, java.lang.OutOfMemoryError: GC overhead limit excee ...

  6. .NET(C#):判断Type类的继承关系

    //Type类的函数 class Type bool IsInstanceOfType(object); //判断对象是否是指定类型 //类型可以是父类,接口 //用法:父类.IsInstanceOf ...

  7. 利用Gabor变换法分析纹理图像 matlab代码实现

    Gabor变化属于加窗傅里叶变换,Gabor函数可以在频域不同尺度.不同方向上提取相关的特征.Gabor函数与人眼的生物作用相仿,所以经常用于纹理识别上,并取得了较好的效果. 二维Gobor滤波函数: ...

  8. github pages + hexo 搭建 blog 遇到的问题

    一. ERROR Deployer not found: git $ hexo d ERROR Deployer not found: git npm install --save hexo-depl ...

  9. 用Python搞出自己的云词图 | 【带你装起来】

    作者:AI算法与图像处理 参考:http://www.sohu.com/a/149657007_236714 云词图简介 什么词云 由词汇组成类似云的彩色图形.“词云”就是对网络文本中出现频率较高的“ ...

  10. codevs 1048/洛谷 1880:石子归并

    题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使 ...