STL容器之deque

stl之deque双端队列容器 deque与vector非常相似,不仅可以在尾部插入和删除元素,还可以在头部插入和删除。不过当考虑到容器元素的内存分配策略和操作性能时,deque相对vector较为有优势。 头文件 #include 创建deque对象 1)deque();//创建一个没有任何元素的deque对象。 deque d 2)deque(size_typen);//创建一个具有n个元素的deque对象,每个 阅读详情

deque 和vector一样都是标准模板库中的内容,deque 是双端队列,在接口上和vector 非常相似,在许多操作的地方可以直接替换。假如读者已经能够有效地使用vector容器,下面提供deque的成员函数和操作,进行对比参考。

函数

描述

c.assign(beg,end)

c.assign(n,elem) 

将[beg; end)区间中的数据赋值给c。

将n个elem的拷贝赋值给c。

c.at(idx) 

传回索引idx所指的数据,如果idx越界,抛出out_of_range。

c.back() 

传回最后一个数据,不检查这个数据是否存在。

c.begin() 

传回迭代器重的可一个数据。

c.clear() 

移除容器中所有数据。

deque<Elem> c

deque<Elem> c1(c2)

Deque<Elem> c(n)

Deque<Elem> c(n, elem)

Deque<Elem> c(beg,end)

c.~deque<Elem>() 

创建一个空的deque。

复制一个deque。

创建一个deque,含有n个数据,数据均已缺省构造产生。

创建一个含有n个elem拷贝的deque。

创建一个以[beg;end)区间的deque。

销毁所有数据,释放内存。

c.empty() 

判断容器是否为空。

c.end() 

指向迭代器中的最后一个数据地址。

c.erase(pos)

c.erase(beg,end) 

删除pos位置的数据,传回下一个数据的位置。

删除[beg,end)区间的数据,传回下一个数据的位置。

c.front() 

传回地一个数据。

get_allocator 

使用构造函数返回一个拷贝。

c.insert(pos,elem) 

c.insert(pos,n,elem)

c.insert(pos,beg,end)

在pos位置插入一个elem拷贝,传回新数据位置。

在pos位置插入n个elem数据。无返回值。

在pos位置插入在[beg,end)区间的数据。无返回值。

c.max_size() 

返回容器中最大数据的数量。

c.pop_back() 

删除最后一个数据。

c.pop_front() 

删除头部数据。

c.push_back(elem) 

在尾部加入一个数据。

c.push_front(elem) 

在头部插入一个数据。

c.rbegin() 

传回一个逆向队列的第一个数据。

c.rend() 

传回一个逆向队列的最后一个数据的下一个位置。

c.resize(num) 

重新指定队列的长度。

c.size() 

返回容器中实际数据的个数。

C1.swap(c2) 

Swap(c1,c2)

将c1和c2元素互换。

同上操作。

首先deque和vector在定义上是一模一样的,这些在vector那一节讲得更多了,可以对比参考,下面我们主要说说这两张表:

1:对比deque和vector的函数表,少了哪两个函数?

1、   capacity() —— 返回vector当前的容量。

2、   reserve() —— 给指定大小的vector 分配容量。

上面的两个函数是一对函数,就如同size和resize一样,一个分配,一个返回。那么为什么deque没有这两个函数勒?

这就是我们要说的开始,他说明了vector和deque在内存管理上是完全不一样的,其实deque是在内存中分配很多个大块内存,然后相连接起来,不需要像vector那样分配一块连续的内存,(虽然有点像链表,但是他们完全不是同一个设计理念)。

 

 

1:对比deque和vector的函数表,多了哪两个函数?

1、c.push_front(elem) —— 在头部插入一个数据。

2、c.pop_front() —— 删除头部数据。

因为叫双端队列,所以在两个方向都可以插入和删除,比vector多了一个方向的操作。

3:deque必须注意的地方

在deque中进行插入和删除元素的时候,除非在头部和尾部,在其他任何地方操作都会使所有的迭代器失效,这一点务必注意。

对于deque其他的方面就没什么好讲的了,跟vector是完全一样的使用,只是内存模型优于vector,随机访问能力不及vector(虽然都可以访问,但是deque会产生临时对象,效率比不上),头尾两端均可操作,就这样了。

 

 

错误提示“was not declared in this scope”是在C++编译过程中常见的错误之一 错误提示“was not declared in this scope”是在C++编译过程中常见的错误之一。以下是一个例子,展示了这个错误的典型情况以及给出的解决方案。总结一下,当你在C++中遇到“was not declared in this scope”错误时,意味着你的标识符(变量、函数等)在当前作用域中未声明或引入。解决这个问题的方法是提前声明该标识符,以确保编译器可以找到它的定义。函数的声明,我们解决了该错误。函数中,我们声明并初始化了一个名为。函数的声明并成功编译代码。这个错误告诉我们,在。 阅读详情

相关推荐

用Java实现模拟双向循环链表LinkedList

这是自己写的一个Java实现模拟数据结构中的LinkedList。实现其简单的添加节点功能

引入queue头文件后依然报错error: 'queue' was not declared in this scope|

这是因为queue是属于std命名空间的,想使用queue声明变量要引入std命名空间(using namespace std;)或者写 std::queue

catalpeak的博客 4406

LL1_Deque.java

能够设计一个简单的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。还能选择最有代表性的语法分析方法,如LL(1) 语法分析程序、算符优先分析程序和LR分析分析程序。

error has not been declared错误原因总结

可能忘了在使用Class的文件中包含class.h,也就是忘了加头文件。 可能Class名称写错了,或者头文件名写错了,少写、大小写。 忘记修改保护#define的名称。 命名空间是否有错误,没有在命名空间内或者命名空间错误。 可能正在使用模板,而不希望两阶段查找按其方式工作。 可能已经使Class成为仅在包含Class.h之后才定义的宏,在这种情况下,看到的Class被宏预处理器替换为其他宏。 可能已经在问题文件.h以外的头文件中定义了问题类,然后问题类.h实际上定义了其他内容。 ...

m0_37854651的博客 4万+

Linux下离线安装Google Chrome

目录背景一、下载并安装Google Chrome二、下载并安装依赖包1.libvulkan.so.1()(64bit)2.读入数据总结 背景 项目中服务器被要求不能连接外网,不能直接联网安装,所以需要下载Google Chrome安装包和依赖包,然后离线安装。 linux下步骤都一样,不管ubuntu还是centos只是需要下载对应系统的文件包即可。 本机系统:CentOS 7 一、下载并安装Google Chrome 官方下载地址http://www.google.cn/chrome/browser/d

ancientapesman的博客 1万+

利用ArcGIS快速生成等高线边界,完成地形图拼图

地形图边界一般在CAD中手动绘制,然而,一幅边缘复杂的地形图边界的绘制需要花费大量时间和精力,为了减少重复性工作,提高效率,用ArcGIS软件可以自动生成实测地形图的边界

yl14774636230的博客 9068

Java实现带头节点的双向循环队列(链表)

Deque ●queue 是一种数据结构,您可以在前面添加一个新项,然后在后面删除一个项,这样第一 个项进入就是第一个项退出(FIFO)。 ●在这个实验中,我们将创建一个更通用的数据结构,称为 deque,是双端队列的缩写。 ●在一个 deque 中,您可以添加和删除两端的项(无论是其前端还是后端)。 ○在本实验室,您将完成包括添加和删除在内的许多方法。 ●此外,您必须使用通用类型,以便可...

克格莫(有需要的私信) 2071

Python地理空间库安装指南:从gdal到geopandas的完整流程

本文详细介绍了Python地理空间库的完整安装流程,包括gdal、rasterio和geopandas等核心库的安装与配置。通过Anaconda环境管理和conda-forge频道,帮助开发者高效解决依赖问题,确保地理空间数据处理环境的稳定运行。

weixin_29091105的博客 462

STL常用容器—deque容器

整理归纳总结C++ deque容器的常用属性和方法,同时结合vector容器完成一个评委打分的综合案例

weixin_46216674的博客 1343

【游戏开发】初识寻路&navmesh,探索RecastDemo

在手游时代,尤其对于大世界游戏而言,寻路的实现基本在专门的寻路服务器上进行。在众多寻路的解决方案中,recastnavigation是最为经典实用的一个,很多游戏甚至游戏引擎都采用类似的实现。recastnavigation项目自带了RecastDemo,用图形化的界面帮助用户认识寻路网格(navmesh)的生成以及寻路的过程。因此,作为初学者的笔者,也决定通过RecastDemo去初步认识寻路的机理奥秘。 构建RecastDemo 首先克隆recastnavigation项目,从文档中可以看到Recast

HiKariのTechLab 3050

R语言安装包镜像报错?5分钟教你快速切换国内镜像源(含清华/阿里云配置)

本文详细介绍了R语言安装包镜像报错的解决方案,包括如何快速切换国内镜像源(如清华、阿里云等),解决'无法读写貯藏處索引'等常见问题。通过图形界面和命令行两种方式,帮助用户高效配置镜像源,提升R语言包安装速度与稳定性。

weixin_29053073的博客 418

【STL容器讲解—deque】

STL中deque容器讲解deque容器的实现相对于vector容器的区别原因:deque内部工作原理构造函数容器操作 deque容器的实现 deque容器是STL中的一个重要的容器,它的实现的功能是一个双端数组,可以对两端数据进行插入和删除操

qq_41841107的博客 1958

Python调用CANoe(2)(测试模块配置)

本节内容在Python和CANoe的数据交互(1)的基础认知上,继续探索Python如何加载TestSetup,以及运行tse测试文件

蚂蚁小兵 1万+

STL容器总结之deque

STL容器总结之deque deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数: 1.构造,析构 [cpp] view plain copy deque c //创建一个空的deque    deque c1(c2) //赋值dequ

戎码人生 820

【33】软考软件设计师——算法题(二):贪心法与回溯法深度精讲|第4题进阶满分攻略

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第33篇,承接第32篇分治法与动态规划,聚焦**下午第4题算法大题进阶核心**,详解贪心法与回溯法两大高频难点算法。全文超4000字深度拆解贪心法核心原理、贪心选择性质、局部最优推全局最优的底层逻辑,厘清贪心算法适用边界与经典误区;深挖回溯法深度优先遍历思想、递归回溯三步流程、可行性剪枝与最优性剪枝两大核心技巧;全覆盖活动选择、零钱兑换、01背包贪心禁区、八皇后、全排列等软考必考经典题型;配套标准化算法框架代码、考场填空模板、剪枝优化实操案例

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 438

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

STL之deque容器

STL之deque容器

Sunrise的博客 605

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【STL——queue与deque容器】

STL——queue与deque

努力搬砖ing~ 1226

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【详】【STL】deque容器

和其他STL容器一样,deque容器也是以模板类

此地无银 417

STL—deque容器

deque是C++中的双端队列容器,支持高效的头尾插入删除操作。与vector相比,deque在头部操作效率更高,但访问速度稍慢。主要操作包括:构造(默认/区间/拷贝)、赋值、大小调整、插入删除(push/pop/insert/erase)、数据存取(at/operator[]/front/back)以及排序(sort)。使用时需包含<deque>头文件,注意deque没有容量限制但迭代器支持随机访问。这些特性使deque适合需要频繁两端操作的场景。

2501_94419200的博客 707

带你深入理解STL之Deque容器

在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点。vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操作符,节省空间。但是其在分配的内存不够的情况下,需要对容器整体进行重新分配、拷贝和释放等操作,而且在vector中间插入或删除元素效率很低。而list是以节点形式来存放数据,使用的是非连续的内存空间来存

ZeeCoder 1万+

STL序列容器之deque详解

1. STL序列容器中的deque容器 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。 STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和.

nihao_2014的博客 656

C++ STL 之 deque容器-API函数

C++ STL deque容器简介、常用API函数:构造、插入删除、赋值、数据存取;函数:assign();swap();size();empty();resize();push_back(elem);push_front(elem);pop_back();pop_front();at();operator[];front();back();insert();clear(); erase();

weixin_45925859的博客 1171

【C++ STL学习之三】容器deque深入学习

C++ STL容器deque和vector很类似,也是采用动态数组来管理元素。 使用deque之前需包含头文件: #include 它是定义在命名空间std内的一个class template: template class _Ax = allocator > class deque; 第一个template参数用来表示元素型别,第二个可有可无,指定内存模型。一般使

计算机专业同学的充电站。 4万+
上一篇: STL容器之vector
下一篇: C++ stl之迭代器(iterator)
lloil
博客等级 码龄14年 382粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值