[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++程序员提供了一个可扩展的应 ...
随机推荐
- Mysql主从配置步骤与各种错误
测试环境: 2台腾讯云服务器.CentOS 7.2 64位,1G,lnmp. PHP:5.6:Mysql:5.5 两台干净的服务器 下面开始配置主服务器(master) 1.修改配置: log-bi ...
- SSM框架整合图书管理项目
SSM框架整合 1.建立简单的maven项目 2.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <p ...
- 使用NEON指令加速RGB888和RGB565的相互转换
最近在做一个项目需要将RGB888转换为RGB565,用C语言转换的代码很简单,这是从ffmpeg中摘抄的代码 static inline void rgb24to16_c(const uint8_t ...
- python爬虫下载小说
1. from urllib.request import urlopen from urllib import request from bs4 import BeautifulSoup from ...
- 基于数组或链表的学生信息管理系统(小学期C语言程序实训)
1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...
- gin框架——使用viper读取配置
什么是viper Viper是Go应用程序的完整配置解决方案,包括12-Factor(也称为"十二要素",是一套流行的应用程序开发原则. 其实我也不是很清楚)应用程序.它被设计为在 ...
- pod(九):污点taint 与容忍度tolerations
目录 一.系统环境 二.前言 三.污点taint 3.1 污点taint概览 3.2 给节点添加污点taint 四.容忍度tolerations 4.1 容忍度tolerations概览 4.2 设置 ...
- 造个Python轮子,实现根据Excel生成Model和数据导入脚本
前言 最近遇到一个需求,有几十个Excel,每个的字段都不一样,然后都差不多是第一行是表头,后面几千上万的数据,需要把这些Excel中的数据全都加入某个已经上线的Django项目 这就需要每个Exce ...
- 2022春每日一题:Day 15
题目:Balanced lineup 题目说的很清楚了,没有修改,直接RMQ,模板题. 代码: #include <cstdio> #include <cstdlib> #in ...
- Go语言核心36讲11
至今为止,我们讲过的集合类的高级数据类型都属于针对单一元素的容器. 它们或用连续存储,或用互存指针的方式收纳元素,这里的每个元素都代表了一个从属某一类型的独立值. 我们今天要讲的字典(map)却不同, ...