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. js 删除 按钮所在的行

    <body> <table id="delte"> <caption>简易购物车</caption> <tr> < ...

  2. Jmeter启动闪退

    背景:使用Jmeter进行性能测试脚本开发,实现Jmeter接口开发Java请求 问题再现: 1.在官网上下载Jmeter3.2版本,打开jmeter.bat,启动成功 2.在IDEA中创建测试项目和 ...

  3. Qt自定义类添加qvector报错

    PtsData& PtsData::operator=(const PtsData& obj){ return *this;} PtsData::~PtsData(){ }

  4. 利用redis 分布式锁 解决集群环境下多次定时任务执行

    定时任务: @Scheduled(cron= "0 39 3 * * *") public void getAllUnSignData(){ //检查任务锁,若其它节点的相同定时任 ...

  5. 公司手机打卡app时间和百度时间差30秒解决

    问题: 某天发现公司手机打卡app时间和百度时间差30秒解决 分析: nginx        192.168.0.23 外网 : 220.236.7.43 mysql主    192.168.0.2 ...

  6. iOS-保存图片到相册

    //保存      UIButton *saveBtn = [[UIButton alloc] init];    //    saveBtn.frame = CGRectMake((screenWi ...

  7. 服务器watchdog看门狗的理解

    1.什么是watchdog?watchdog,中文名称叫做“看门狗”,全称watchdog timer,从字面上我们可以知道其实它属于一种定时器.然而它与我们平常所接触的定时器在作用上又有所不同.普通 ...

  8. Python中bytes与字符串的相互转化

    代码: # bytes转字符串方式一 b=b'\xe9\x80\x86\xe7\x81\xab' string=str(b,'utf-8') print(string) # bytes转字符串方式二 ...

  9. LomBok插件--模型类注解

    Data注解,ToString注解都是Lombok提供的注解. Lombok是一个实用的java工具,使用它可以消除java代码的臃肿,Lombok提供一系列的注解,使用这些注解可 以不用定义gett ...

  10. C语言递归之在每个树行中找最大值

    题目描述 您需要在二叉树的每一行中找到最大的值. 示例 输入: / \ / \ \ 输出: [, , ] 题目要求 /** * Definition for a binary tree node. * ...