c++ 双端队列 deque 之 (头部、尾部)插入元素/删除元素/
头文件 #include <deque>
和vector用法基本相同
没有 capacity() reserve()
有了push_back(),pop_back()
//insert elements in first a.push_front(some_element)
//insert elements at last a.push_back(some_element);
//pop element at first a.pop_front(some_element);
//pop element at last a.pop_back(some_element);
#include <iostream>
#include <string>
#include <deque>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
int main()
{vector<int> v_int = {1,2,3,4};deque<int> d_int;d_int.push_back(1);d_int.push_back(2);d_int.push_back(1001);d_int.push_back(1002);d_int.push_front(-1);d_int.push_front(-2);d_int.push_front(-3);d_int.push_front(-4);for(size_t i = 0;i != d_int.size() ; ++i){cout << "a[" << i << "] = " << d_int[i] << endl;//cout << v_int[i] << endl;}cout << "iterator 's output:" << endl;d_int.pop_front();d_int.pop_back();//cout << del_1 << endl;//cout << del_2 << endl;for(deque<int>::iterator i = d_int.begin(); i != d_int.end() ;++ i )cout << *i <<endl;return 0;
}
6、双端队列deque
所谓的deque是”double ended queue”的缩写,双端队列不论在尾部或头部插入元素,都十分迅速。而在中间插入元素则会比较费时,因为必须移动中间其他的元素。双端队列是一种随机访问的数据类型,提供了在序列两端快速插入和删除操作的功能,它可以在需要的时候改变自身大小,完成了标准的C++数据结构中队列的所有功能。
Vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。deque对象在队列的两端放置元素和删除元素是高效的,而向量vector只是在插入序列的末尾时操作才是高效的。deque和vector的最大差异,一在于deque允许于常数时间内对头端进行元素的插入或移除操作,二在于deque没有所谓的capacity观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来。换句话说,像vector那样“因旧空间不足而重新配置一块更大空间,然后复制元素,再释放旧空间”这样的事情在deque中是不会发生的。也因此,deque没有必要提供所谓的空间预留(reserved)功能。
虽然deque也提供Random Access Iterator,但它的迭代器并不是普通指针,其复杂度和vector不可同日而语,这当然涉及到各个运算层面。因此,除非必要,我们应尽可能选择使用vector而非deque。对deque进行的排序操作,为了最高效率,可将deque先完整复制到一个vector身上,将vector排序后(利用STL的sort算法),再复制回deque。
deque是一种优化了的对序列两端元素进行添加和删除操作的基本序列容器。通常由一些独立的区块组成,第一区块朝某方向扩展,最后一个区块朝另一方向扩展。它允许较为快速地随机访问但它不像vector一样把所有对象保存在一个连续的内存块,而是多个连续的内存块。并且在一个映射结构中保存对这些块以及顺序的跟踪。
1、声明deque容器
#include<deque> // 头文件
deque<type> deq; // 声明一个元素类型为type的双端队列que
deque<type> deq(size); // 声明一个类型为type、含有size个默认值初始化元素的的双端队列que
deque<type> deq(size, value); // 声明一个元素类型为type、含有size个value元素的双端队列que
deque<type> deq(mydeque); // deq是mydeque的一个副本(是真的不?那上面怎么解释)
deque<type> deq(first, last); // 使用迭代器first、last范围内的元素初始化deq
2、deque的常用成员函数
deque<int> deq;
deq[ ]:用来访问双向队列中单个的元素。
deq.front():返回第一个元素的引用。
deq.back():返回最后一个元素的引用。
deq.push_front(x):把元素x插入到双向队列的头部。
deq.pop_front():弹出双向队列的第一个元素。
deq.push_back(x):把元素x插入到双向队列的尾部。
deq.pop_back():弹出双向队列的最后一个元素。
3、deque的一些特点
支持随机访问,即支持[ ]以及at(),但是性能没有vector好。
可以在内部进行插入和删除操作,但性能不及list。
deque两端都能够快速插入和删除元素,而vector只能在尾端进行。
deque的元素存取和迭代器操作会稍微慢一些,因为deque的内部结构会多一个间接过程。
deque迭代器是特殊的智能指针,而不是一般指针,它需要在不同的区块之间跳转。
deque可以包含更多的元素,其max_size可能更大,因为不止使用一块内存。
deque不支持对容量和内存分配时机的控制。
在除了首尾两端的其他地方插入和删除元素,都将会导致指向deque元素的任何pointers、references、iterators失效。不过,deque的内存重分配优于vector,因为其内部结构显示不需要复制所有元素。
deque的内存区块不再被使用时,会被释放,deque的内存大小是可缩减的。不过,是不是这么做以及怎么做由实际操作版本定义。
deque不提供容量操作:capacity()和reverse(),但是vector可以。
c++ 双端队列 deque 之 (头部、尾部)插入元素/删除元素/相关推荐
- 【C++】STL常用容器总结之五:双端队列deque
6.双端队列deque 所谓的deque是"double ended queue"的缩写,双端队列不论在尾部或头部插入元素,都十分迅速.而在中间插入元素则会比较费时,因为必须移动中 ...
- 6-5-2:STL之stack和queue——双端队列deque
文章目录 双端队列-deque 双端队列-deque deque是一种双向开口的连续线性空间.所谓双向开口,意思就是可以在头尾两端分别进行元素的插入和删除操作 deque的出现是为了解决融合vecto ...
- C++ 双端队列(deque)的使用
双端队列(deque)是什么 双端队列(deque)是一种随机访问的数据类型,提供了在序列两端快速插入和删除的功能,deque类似于vector, 双端队列(deque)属于STL(Standard ...
- Java双端队列Deque及其应用
目录 1.Deque的概念 2.双端队列操作 3.双端队列演示示例 4.双端队列典型应用(滑动窗口/单调栈问题) 1.Deque的概念 双向队列:支持在首尾插入和删除元素的线性集合.它具有既具有FIF ...
- [转载] Python的双端队列deque
参考链接: Python中的双端队列DeQue Python的强大并不在于它的语法,而在于它的库,当你对各种数据结构感到苦恼时,Python提供了各种开箱即用的数据结构. 数据结构中最常讲授的数据结构 ...
- 队列(queue)与双端队列(deque)—Python实现方法及回文词应用
队列 Queue 抽象数据类型Queue:一个有次序的数据集合,数据项仅从 尾(rear) 端添加,且仅从 首(front) 端移除,具有 "FIFO" 的特点. 需要实现的操作: ...
- STL之双端队列deque:新手入门,基础应用
STL之双端队列deque:新手入门,基础应用 简单的自我介绍 STL之deque:基本函数的运用 源代码 运行结果 结尾 简单的自我介绍 一名努力学习code的计算机专业大二在校学生,平时不论是完成 ...
- C++ 双端队列deque
双端队列的简单认识 双端队列是动态大小的序列式容器,其可以像两端进行伸缩. 特定的库可以以不同的方式实现deque,但通常都是一种动态数组.不论在何种情况下,它都允许通过随机访问迭代器直接访问单个元素 ...
- java lifo 队列_1.8 Java 队列 Queue、双端队列 Deque - Java 知识总结与学习
queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口.除了基本的 Collection 操作外,队列还 ...
最新文章
- html页面视频标签,html5基础标签(html5视频标签 html5新标签用法)
- 人工智能和人类智能的类比
- 手机自动化测试:appium源码分析之bootstrap十二
- 怎么捡自己空投_使命召唤手游空投怎么快速找到?使命召唤手游快速找到空投技巧...
- 一家永不上市,利润共享的行业龙头,依旧还是那个务实创新的少年
- IdHTTP1.Get(url)得到的源码怎么跟直接浏览的不一样呢?
- PAT乙级 1086 就不告诉你 (附测试点1,2排查及用例)
- ESXI5.1 数据备份与恢复
- mac 系统下 刻录centos 系统到 U盘中
- 【三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 015期】
- linux系统可以用autocad吗,还在找适用于Linux系统的CAD软件?这5款千万别错过!
- matlab 传函将s换为jw,已知单位负反馈系统开环传递函数为20 s(0.5s 1),
- 机器学习笔记最大熵之NER
- 《图解HTTP》摘录
- 解决宝塔面板开启HTTS后,Edge不能访问的问题
- 计算机在机械智能制造中的应用,机电一体化技术应用于智能制造中的优势研究...
- dockerfile unknown instruction:jar
- Win10 Build 14942 Edge浏览器闪退怎么解决?
- coalesce---一个很有用的函数
- 【集合论】序关系 : 总结 ( 偏序关系 | 偏序集 | 可比 | 严格小于 | 覆盖 | 哈斯图 | 全序关系 | 拟序关系 | 偏序关系八种特殊元素 | 链 | 反链 ) ★★
热门文章
- UESTC 1851 Kings on a Chessboard
- Oracle 监听(Listener) 中 services 说明
- [Python人工智能] 十三.如何评价神经网络、loss曲线图绘制、图像分类案例的F值计算
- [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
- 【数据结构与算法】之深入解析“合并两个有序链表”的求解思路与算法示例
- HarmonyOS之深入解析线程管理
- 2017/National _Java_C/2/数字划分
- 133. Clone Graph 克隆图
- Flask 快速上手
- python中星号变量的几种特殊用法