[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++程序员提供了一个可扩展的应 ... 
随机推荐
- 5.ElasticSearch系列之文档的基本操作
			1. 文档写入 # create document. 自动生成 _id POST users/_doc { "user" : "shenjian", " ... 
- misc办公室爱情
			 隐藏文字password2 编辑 word改后缀zip解开后document.xml找到password1 编辑 True_lOve_i2_supReMe 用wbs43open+密码解密pdf ... 
- 删除数组里含有a的元素,并且将null值放在后面
			想去掉里面含有a的元素,并将null放在后面.放在后面就是往后移,其他值往左移 1 public static void main(String[] args) { 2 //自定义的一个数组 3 St ... 
- JavaScript基础&实战(1)js的基本语法、标识符、数据类型
			文章目录 1.JavaScript简介 2.输出语句 2.1 代码块 2.2 测试结果 3.JS编写位置 3.1代码 3.2 测试结果 4.基本语法 4.1 代码 5.标识符 5.1 代码 6.数据类 ... 
- JS常见问题总结
			1. 什么是 JavaScript ? JavaScript 是一种具有面向对象的.解释型的.基于对象和事件驱动的.跨平台的.弱类型的程序设计语言 2. JavaScript 与 ECMAScript ... 
- 详细了解JVM运行时内存
			详细了解JVM运行时内存 1.程序计数器 概念 程序计数器也叫作PC寄存器,是一块很小的内存区域,可以看做是当前线程执行的字节码的行号指示器.字节码的解释工作就是通过改变程序计数器里面的值来获得下一条 ... 
- hutool包的DateUtil工具类
			[首先引入依赖 ] <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-core& ... 
- mindxdl--common--utils.go
			// Copyright (c) 2021. Huawei Technologies Co., Ltd. All rights reserved.// Package common define co ... 
- 深度学习之tensorflow2实战:多输出模型
			欢迎来到CNN实战,尽管我们刚刚开始,但还是要往前看!让我们开始吧! 数据集 链接:https://pan.baidu.com/s/1zztS32iuNynepLq7jiF6RA 提取码:ilxh,请 ... 
- Seata 1.5.2 源码学习(事务执行)
			关于全局事务的执行,虽然之前的文章中也有所涉及,但不够细致,今天再深入的看一下事务的整个执行过程是怎样的. 1. TransactionManager io.seata.core.model.Tran ... 
