STL之deque详解
Deuqe概念
容器deque和vector非常相似,属于序列式容器。都是采用动态数组来管理元素,提供随机存取,并且有着和vector一样的接口。不同的是deque具有首尾两端进行快速插入、删除的能力。
Deque结构
1.由一段一段的定量连续空间构成,第一个区块朝某个方向扩展,最后一个区块朝相反方向扩展;2.管理这些分段的定量连续空间,维护其整体连续的假象,并提供随机存取的接口;
Deque的能力
与vector相比,deque功能上的不同之处在于:
- 首尾两端都能快速的安插、删除元素,因此需要在两端安插、删除元素时,最好采用deque。
- 存在元素时,deque的内部结构会多一个间接过程,操作元素的效率会比vector低一些。
- 迭代器需要在不同区块间跳转,所以必须是特殊的智能指针,非一般指针。
- deque不支持对容量和内存重分配时机的控制,除了首尾两端安插、删除元素外,其他地方安插、删除元素都将导致元素的pointer、reference、iterator失效。不过,deque的内存重分配机制优于vector,因为deque不必在内存重分配时复制所有的元素。
- deque的内存区块不再被使用时,会被释放。
deque的操作函数:
- deque不提供容量操作( capacity()、reserve() )
- deque提供push_front()、pop_front()函数直接操作头部
Deque的特点:
从deque的内部结构可知,deque元素是分布在一段段连续空间上,因此deque具有如下特点:
1、支持随机访问,即支持[]以及at(),但是性能没有vector好。
2、可以在内部进行插入和删除操作,但性能不及list。
举例
#include "stdafx.h"
#include <deque>
#include <string>
#include <iostream>
#include <algorithm>using namespace std;void DequeExample()
{deque<string> strDeq;//空队列strDeq.assign(3, string("string"));//赋值//打印deque的内容for (unsigned i = 0; i < strDeq.size(); i++){cout << "strDeq[" << i << "] :" << strDeq[i] << endl;}cout << "push_front and push_back elem to deque" << endl;//首尾插入元素strDeq.push_front("first string");strDeq.push_back("last string");//打印deque的内容for (unsigned i = 0; i < strDeq.size(); i++){cout << "strDeq[" << i << "] :" << strDeq[i] << endl;}cout << "pop_front and pop_back elem from deque" << endl;//首尾弹出元素strDeq.pop_front();strDeq.pop_back();//打印deque的内容for (unsigned i = 0; i < strDeq.size(); i++){cout << "strDeq[" << i << "] :" << strDeq[i] << endl;}
}
运行结果
转载于:https://www.cnblogs.com/jinxiang1224/p/8468418.html
STL之deque详解相关推荐
- c语言stl模板,c/c++开发分享C++ 标准模板库 STL 顺序容器详解
c++ 标准模板库 stl 顺序容器 容器 顺序性 重复性 支持迭代器 vector 动态数组 无序 可重复 随机访问迭代器 deque 双向队列 无序 可重复 随机访问迭代器 list 双向链表 无 ...
- [学习C++ ]C++ STL 全排列函数详解(排列组合与匹配算法)--1
一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列.如果这组数有n个,那么全排列数为n!个. 比如a ...
- STL 之vector详解
STL之vector容器详解 vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样 ...
- C++STL笔记(五):Deque详解
Deque结构 有着和vector几乎一模一样的接口,不同的是Deque的dynamic array头尾都开放,因此能在头尾两端进行快速安插和删除. 一.Deque的构造函数和析构函数 二.Deq ...
- STL sort()函数详解
西方有句谚语:不要重复发明轮子! STL几乎封装了所有的数据结构中的算法,从链表到队列,从向量到堆栈,对hash到二叉树,从搜索到排序,从增加到删除......可以说,如果你理解了STL,你会发现你已 ...
- STL—queue(队列) 详解
首先,在STL中 queue 和 stack 其实并不叫容器(container),而是叫适配器(adapter),他们是对容器的再封装. 队列queue: 队列,简称对,是一种操作受限的线性表.限制 ...
- C++中STL各个迭代器详解
1.自C++11起可以用range-based for循环来所有元素,但有时并不需要处理所有元素,此时可以使用迭代器. std::vector<int> vec {1,2,3,4,5,6, ...
- C++(STL):34--- multiset容器详解
前面章节中,对 set 容器做了详细的讲解.回忆一下,set 容器具有以下几个特性: 不再以键值对的方式存储数据,因为 set 容器专门用于存储键和值相等的键值对,因此该容器中真正存储的是各个键值对的 ...
- C++ STL之vector详解
转自http://blog.sina.com.cn/s/blog_9f1c0931010180cy.html Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操 ...
最新文章
- SharePoint【Query Options系列】-- Query Options的一些用法 01. 展开用户列信息
- Springboot整合xxl-job实现任务自定义定时任务
- 1050 循环数组最大子段和
- 在JDK 8中连接字符串
- Flowable 数据库表结构 ACT_HI_PROCINST
- python学习--交互式图形编程实例四
- 关于java的回调方法
- GridView 水平方向滑动
- 服务器网卡无法开启lldp协议,lldp支持-VMware vSphere - 思科华为论坛
- 对话机器学习大神Yoshua Bengio(下)
- C#调用RDP,实现远程桌面共享及控制
- 傲腾readyboost_从提示框:自动耳机音量调节,Compact Windows ReadyBoost和安全电话充电...
- 后台界面也可以很酷!31个高大上的后台管理系统模版
- FPGA控制AD7606进行数据采集
- 传奇单职业1.76御天战神强势来袭
- 2020-8-15词汇
- 双服务器架构实战飞桨部署-自动上色和老相片修复
- [Ubuntu] ubuntu/LINUX游戏集锦(更新十余款大型3D游戏)
- AIX日志型文件系统的nbpi
- 炼钢行业皮带无人化管理的问题及解决