[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++程序员提供了一个可扩展的应 ...
随机推荐
- 2022年最新编辑Linux基础知识总结
文章目录 1.Linux的目录结构 2.远程操作Linux和上传文件到Linux 3.文本编辑 4.快捷键 5.登录.注销.关机.重启 6.用户管理 6.1 .新用户注册 6.2.使用新用户登录 6. ...
- 齐博x1自定义字段关联其它字段的隐藏显示
如下图,对于单选\多选\下拉框这种表单类型, 选择某一项后, 你还想他关联其它选项的隐藏或显示,你可以加多一个参数设置处理通常情况,用得最普遍的,就是两项参数,用竖线隔开,比如下面的1|洋房2|别墅 ...
- golang中的一些实用功能
0.1.索引 https://waterflow.link/articles/1663921524839 通过使用一些通用代码来节省时间,而无需单独实现它们.以下是一些开发中经常会用到的函数实现的列表 ...
- C++ set集合容器用法解析
1.简介 set是C++STL库中的一个容器,他十分的便利,所有的元素插入时都会被自动排序,并且容器内保证元素不重复,就想高一数学中讲的集合具有互异性一样,(好像set本来就叫集合容器 bushi)2 ...
- 5.websocket原理
websocket协议原理 1.WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与 ...
- vue中push()和splice()的使用方法
vue中push()和splice()的使用方法 push()使用 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度.注意:1. 新元素将添加在数组的末尾. 2.此方法改变数组的长度 ...
- 【神经网络】丢弃法(dropout)
丢弃法是一种降低过拟合的方法,具体过程是在神经网络传播的过程中,随机"沉默"一些节点.这个行为让模型过度贴合训练集的难度更高. 添加丢弃层后,训练速度明显上升,在同样的轮数下测试集 ...
- 七、Ajax请求
七.Ajax请求 客户端(浏览器)向服务端发起请求的形式: 地址栏:GET 超链接标签:GET form表单:GET或POST Ajax(重要):GET或POST或PUT或DELETE AJAX(As ...
- 基于PCIe DMA的8通道视频采集&显示IP,兼容V4L2
基于PCIe DMA的8通道视频采集&显示IP,兼容V4L2 Video Capture&Display IP for V4L2 在主机端视频设备内核驱动V4L2 的控制和调度下,Vi ...
- 「MySQL高级篇」MySQL之MVCC实现原理&&事务隔离级别的实现
大家好,我是melo,一名大三后台练习生,死去的MVCC突然开始拷打我! 引言 MVCC,非常顺口的一个词,翻译起来却不是特别顺口:多版本并发控制. 其中多版本是指什么呢?一条记录的多个版本. 并发控 ...