[C++标准模板库:自修教程与参考手册]关于deque
Deque的基本概念
deque和vector很相似,也提供随机存取的能力,将元素都动态地存储在一个数组中,最大的区别就是:deque的头和尾都是开放的,非常方便在头尾两端进行一些操作。(重点在于:deque所占用的内存区域不是连续的一块区域,可能是多块内存区域,就像数据结构中的邻接表一样,表中每一个指针指向一块内存区域的起始地址,它采用一个map(不是STL中的map)作为主要控制,每个元素都是一个指针,指向一个缓冲区,这个缓冲区才是真正的存储区(SGI STL允许指定默认的单个缓冲区大小,默认是512byte),从概念上来讲是这样,所以deque的迭代器也比较特别,因为进行地址的自增操作,需要可能会发生内存区域的跨越,这样消耗的时间会比别的迭代器要慢上一些)
deque和vector的一些区别
- deque可以很快速的在头尾两端进行插入和删除操作,这些都能在O(1)的时间内完成。
- 存取元素时,迭代器的计算会多一些地址上的计算,所以可能会慢一些。
- 迭代器需要在不同的内存区域上跳转,所以需要特别的智能指针,而不是一般的指针。
- deque不含有对容量和内存重新分配的函数,不过deque的内存重新分配机制比vector的要好,因为它不会在内存重新分配的时候重新复制所有元素(只需要重新赋值部分内存区域上的元素,而不是全部,这个被重新赋值的区域是连续的)
- 在中间进行插入的时间还是较慢,因为还是需要移动元素。
- c.at(idx)会进行范围检查,而c[idx]不会,所以最好使用前者而不是后者
vector和deque的差别表面上看起来并不大,但是其deque的元素赋值实因为deque内部空间并不是完全连续的,所以针对deque的算法,迭代器的复杂程度都是vector所无法相比的,因此能使用vector的情况下就尽量使用vector,而且针对deque的排序操作,可以将deque的元素先复制到vector中,用sort排序之后再复制回去,这样效率会更加高。
deque一些常用的函数
//产生一个空的deque
deque<elem> c;
//用c2来赋值c1
deque<elem> c1(c2);
//产生一个deque,其中含有n个元素,均以默认构造函数产生
deque<elem> c1(n);
//销毁所有元素,释放内存
c.~deque<elem>();
//返回容器的实际元素个数
c.size();
//判断容器大小是为空
c.empty();
//返回可容纳的最大元素数量
c.max_size();
//返回idx所指向位置的元素,如果超出范围,会抛出异常out_range
c.at(idx);
//返回idx所指向位置的元素,不进行返回检查
c[idx];
//返回c第一个的元素,不进行范围检查
c.front();
//返回c最后一个元素,不进行范围检查
c.end();
//将c1和c2的元素互换
c1.swap(c2);
//移除所有元素,将deque清空
c1.clear();
//从头部插入元素
c.push_front();
//从尾部插入元素
c.push_back();
//删除头部元素,不返回
c.pop_front();
//删除尾部元素,不返回
c.pop_back();
[C++标准模板库:自修教程与参考手册]关于deque的更多相关文章
- STL 简介,标准模板库
这篇文章是关于C++语言的一个新的扩展--标准模板库的(Standard Template Library),也叫STL. 当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话 ...
- c++学习书籍推荐《数据结构C++语言描述:应用标准模板库STL(第2版)》下载
本书是Ford和Topp两位教授于1996看出版的名著Data Structures with C++的第2版,在全球范围内已经有数以万计的学生从中受益.作者将C++语言作为算法描述语言,应用包含规范 ...
- 7.4 C++标准模板库(STL)的概念
参考:http://www.weixueyuan.net/view/6401.html 总结: 标准模板库为C++提供了完善的数据结构及算法. 标准模板库包括三部分:容器.算法和迭代器. 容器是对象 ...
- 如何导出标准模板库(STL)类的实例化和包含STL类对象数据成员的类
本文翻译自 https://support.microsoft.com/zh-cn/help/168958/how-to-export-an-instantiation-of-a-standard-t ...
- C++标准模板库(STL)和容器
1.什么是标准模板库(STL)? (1)C++标准模板库与C++标准库的关系 C++标准模板库其实属于C++标准库的一部分,C++标准模板库主要是定义了标准模板的定义与声明,而这些模板主要都是 类模板 ...
- 标准模板库(STL)学习指南之sort排序
对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思 ...
- C++标准模板库Stand Template Library(STL)简介与STL string类
参考<21天学通C++>第15和16章节,在对宏和模板学习之后,开启对C++实现的标准模板类STL进行简介,同时介绍简单的string类.虽然前面对于vector.deque.list等进 ...
- C++ 标准模板库(STL)-stack
主要介绍一下C++11版本中标准模板库中栈的用法,希望可以帮到需要用的人. #include <iostream> #include <stack> #include < ...
- std(标准库)和STL(标准模板库)的关系
C++标准库的内容分为10类: C1.语言支持 C2.输入/输出 C3.诊断 C4.一般工具 C5.字符串 C6.容器 C7.迭代器支持 C8.算法 C9.数值操作 C10.本地化: 下面分类详解: ...
- STL标准模板库(简介)
标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...
随机推荐
- Python学习三天计划-1
一.第一个Python程序 配置好环境变量后 打开CMD(命令提示符)程序,输入Python并回车 然后,在里面输入代码回车即可立即执行 Python解释器的作用是 将Python代码翻译成计算机认识 ...
- springboot+vue 实现校园二手商城(毕业设计一)
1.功能划分 2.实现的效果 2.1 登录页面 2.2 注册页面 2.3 商城首页 2.4 商品详情 2.5 购物车 2.6 订单 2.7 在线交流 2.8 公告信息 2.9 个人信息 3.后台管理界 ...
- 齐博X1-新建一个空模板并在后台选择
本节实际操作建立一个空模板,并且让后台识别,选择该风格 先在index_style中建立一个目录,命名mystyle并上传我们在mystyle目录中建立一个info.php文件,代码如下:上传后,后台 ...
- MinGW配置C语言编译器gcc和g++
首先,在 https://sourceforge.net/projects/mingw/files/latest/download 下载安装MinGW,如下图所示: 点Installation-> ...
- shardingsphere-jdbc 水平分表学习记录
放在自己博客里搬过来一份~ 前司使用的是自己魔改的TDDL,在家时间比较多就尝试学一些业内比较常用的中间件. 这里记录一下学习中遇到的一些问题. 环境 设置的比较简单(太懒了就测试了几个表), 两个分 ...
- 如何在bat中进入虚拟环境
很多情况下我们希望在项目中建立一个build.bat用于项目的自动构建,避免每次构建时都需要手动在控制台中输入命令. 例如对于 pyinstall 的项目,只需要如下的实现: pyinstaller ...
- Oracle数据泵导入dmp文件,报UDI-00013、UDI-00019错误原因
这个问题挺简单,想了想,还是记录下吧. [root@ufdb165 bin]# ./impdp cwy_init0914/cwy_123456789@ufgovdb1 directory=DATA_P ...
- threejs三维地图大屏项目分享
这是最近公司的一个项目.客户的需求是基于总公司和子公司的数据,开发一个数据展示大屏. 大屏两边都是一些图表展示数据,中间部分是一个三维中国地图,点击中国地图的某个省份,可以下钻到省份地图的展示. 地图 ...
- C/C++ 知海拾遗
C语言知识拾遗 2022/11/11 memset()函数用法 包含头文件:<string.h> 作用:给任意类型变量数组初始化,即万能初始化函数. 使用形式:memset( void* ...
- nsenter命令简介
nsenter命令是一个可以在指定进程的命令空间下运行指定程序的命令.它位于util-linux包中. 用途 一个最典型的用途就是进入容器的网络命令空间.相当多的容器为了轻量级,是不包含较为基础的命令 ...