当前位置: 首页 > news >正文

deque容器

deque容器的基本概念

deque 是 C++ 标准库中的双端队列(double-ended queue)容器,提供了在两端进行插入和删除操作的功能。

dequeue容器

deque与vector区别:

  • vector对于头部的插入删除效率低,数据量越大效率越低。
  • deque相对而言,对头部的插入删除速度会比vector块。
  • vector访问元素时的速度会比deque快,这和两者的内部实现有关。

deque容器的常用函数:

1. 构造和赋值函数:

  • deque<T>: 创建一个空的 deque 对象。
  • deque<T>(size_t n, const T& val): 创建一个包含 n 个初始值为 val 的元素的 deque对象。
  • deque<T>(const deque<T>& other): 创建一个新的deque对象,它是从另一个 deque 对象 other 中进行复制构造得到的。
  • operator=: 将一个 deque 对象的内容复制给另一个 deque 对象。
deque<T>& operator=(const deque<T>& other);

2. 容量相关函数:

  • size(): 返回 deque 中元素的个数。
  • empty(): 检查 deque 是否为空。
  • resize(size_t n): 改变 deque 的大小,使其包含 n 个元素。
  • max_size(): 返回 deque 可以包含的最大元素个数。

3. 访问元素函数:

  • operator[]: 访问指定位置的元素,可以通过索引访问。
  • at(size_t pos): 访问指定位置的元素,提供了越界检查。
  • front(): 返回第一个元素的引用。
  • back(): 返回最后一个元素的引用。

4. 修改容器函数:

  • push_back(const T& val): 在deque的末尾插入一个元素。
  • push_front(const T& val): 在deque的前面插入一个元素。
  • pop_back(): 移除 deque 的最后一个元素。
  • pop_front(): 移除deque的第一个元素。
  • insert(iterator pos, const T& val): 在指定位置之前插入一个元素。
  • erase(iterator pos): 移除指定位置的元素。
  • clear(): 移除 deque 中的所有元素。

4. 迭代器相关函数:

  • begin(): 返回指向 deque 开始位置的迭代器。
  • end(): 返回指向deque结束位置的迭代器。
  • rbegin(): 返回指向 deque 最后一个元素的逆向迭代器。
  • rend(): 返回指向 deque 第一个元素之前的逆向迭代器。

deque内部工作原理

deque内部有一个中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据。
中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

deque基本操作

deque构造器

函数原型:

  • deque<T> deqT;//默认构造形式。
  • deque(beg,end);//构造函数将[beg,end)区间中的元素拷贝给本身。
  • deque(n,elem);//构造函数将n个elem拷贝给本身。
  • deque(const deque &beq);//构造拷贝函数。
#include<iostream>
#include<deque>
using namespace std;
//deque构造函数
void printDeque(const deque<int>& d){
//这是一个打印函数,我们希望它只读,不能修改数据,故在形参中加入constfor(deque<int>::const_iterator it=d.begin();it!=d.end();it++){//迭代器指向的内容不能改变// *it=100; 容器中的数据不可以修改了cout<<*it<<" ";}cout<<endl;
}
void test1(){deque<int> d1;//默认构造for(int i=0;i<10;i++){d1.push_back(i);}printDeque(d1);deque<int> d2(d1.begin(),d1.end());//构造函数将[beg,end)区间中的元素拷贝给本身printDeque(d2);deque<int> d3(10,100);//构造函数将n个elem拷贝给本身printDeque(d3);deque<int> d4(d3);printDeque(d4);   
}
int main(){test1();system("pause");return 0;
}

deque容器和vector容器的构造方式几乎一致,灵活使用即可。

deque的赋值操作

函数原型:

  • deque& operator=(const deque& deq);//重载等号操作符
  • assign(beg,end);//将[beg,end)区间中的数据拷贝赋值给本身
  • assign(n,elem);//将n个elem拷贝赋值给本身
#include<iostream>
#include<deque>
using namespace std;
void printDeque(const deque<int>& d){for(deque<int>::const_iterator it=d.begin();it!=d.end();it++){cout<<*it<<" ";}cout<<endl;
}
//deque赋值操作
void test1(){deque<int> d1;for(int i=0;i<10;i++){d1.push_back(i);}printDeque(d1);//operator=赋值deque<int> d2;d2=d1;printDeque(d2);//assign赋值deque<int> d3;d3.assign(d1.begin(),d1.end());printDeque(d3);deque<int> d4;d4.assign(10,100);printDeque(d4);
}
int main(){test1();system("pause");return 0;
}

deque大小操作

函数原型:

  • deque.empty();//判断容器是否为空。

  • deque.size();//返回容器中元素的个数。

  • deque.resize(num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

  • deque.resize(num,elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。

deque中并没有容量的概念,因为deque的内部结构中并没有容量的限制,deque可以无限开辟空间。

#include<iostream>
#include<deque>
using namespace std;
//deque大小操作
void printDeque(const deque<int>& d){for(deque<int>::const_iterator it=d.begin();it!=d.end();it++){cout<<*it<<" ";}cout<<endl;
}
void test1(){deque<int> d1;for(int i=0;i<10;i++){d1.push_back(i);}printDeque(d1);if(d1.empty()){cout<<"d1为空"<<endl;}else{cout<<"d1不为空"<<endl;cout<<"d1的大小为:"<<d1.size()<<endl;}// d1.resize(15);d1.resize(15,1);printDeque(d1);d1.resize(5);printDeque(d1);
}
int main(){test1();system("pause");return 0;
}

deque插入和删除

函数原型:

两端插入删除:

  • push_back(elem);//在容器尾部添加一个数据
  • push_front(elem);//在容器头部插入一个数据
  • pop_back();//删除容器最后一个数据
  • pop_front();//删除容器的第一个数据

指定位置操作:

  • insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置
  • insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值
  • insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值
  • clear();//清空容器的所有数据
  • erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置
  • erase(pos);//删除pos位置的数据,返回下一个数据的位置

插入和删除提供的位置是迭代器
尾插 —— push_back
头插 —— push_front
尾删 —— pop_back
头删 —— pop_front

deque数据存取

  • at(int idx);//返回索引idx所指的数据
  • operator[];//返回索引idx所知的数据
  • front();//返回容器第一个数据元素
  • back();//返回容器中最后一个数据元素

deque排序

利用算法实现对deque容器进行排序

sort(iterator beg,iterator end);//对beg和end区间内元素进行排序

sort算法非常实用,使用时包含头文件algorithm即可。

相关文章:

deque容器

deque容器的基本概念 deque 是 C 标准库中的双端队列&#xff08;double-ended queue&#xff09;容器&#xff0c;提供了在两端进行插入和删除操作的功能。 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大效率越低。deque相对而言&am…...

Redis远程字典服务器(9)—— 类型补充

类型查询传送门&#xff1a;Understand Redis data types | Docs 一&#xff0c;stream类型 官方文档对于这个类型的解释是&#xff1a;streams是一个数据结构&#xff0c;它表现得像一个 “append-only log”&#xff0c;就是只能往后面添加&#xff0c;底层是字符串&#x…...

VMware虚拟机nat无法联通主机

VMware在nat模式下主机无法ping通虚拟机 原因&#xff1a; 虚拟机和对应的网卡不在一个网段 虚拟机开启了防火墙 解决方法: 首先判断虚拟机的网络ip是否和网卡在一个网段上 判断虚拟机使用的网卡 nat模式在VMware虚拟机中一般只有一个对应的网卡 如图笔者的nat网卡为VM…...

「字符串」详解AC自动机并实现对应的功能 / 手撕数据结构(C++)

目录 前置知识 概述 核心概念&#xff1a;fail指针 作用 构建 图示 Code 成员变量 创建销毁 添加词库 文本扫描 复杂度 Code 前置知识 在此前&#xff0c;你应该首先了解trie树&#xff08;字典树&#xff09;的概念&#xff1a; 「字符串」详解Trie&#xff0…...

freecad遭遇网络不同无法安装插件Addon Manager: Unexpected 0 response from server

16:31:18 Addon Manager: Unexpected 0 response from server 16:31:18 Failed to connect to GitHub. Check your connection and proxy settings. 打开freecad的插件管理器时候&#xff0c;有些地方&#xff0c;比如我在家里就不行&#xff0c;在公司就ok。 于是找到了解…...

Ruby模板引擎:构建动态视图的艺术

标题&#xff1a;Ruby模板引擎&#xff1a;构建动态视图的艺术 在Ruby on Rails的世界里&#xff0c;模板引擎是构建动态网页的基石。它们允许开发者将服务器端的逻辑嵌入到HTML中&#xff0c;实现数据的动态展示。本文将深入探讨Ruby中几种常用的模板引擎&#xff0c;包括ERB…...

HarmonyOS NEXT星河版零基础入门(3)

目录 1. 系统弹出框 2.interface转成class类 3.vp/fp 4. 写一个正方形 设置它的宽度 但不设定高度 不论屏幕怎么变实现他的宽高比 5.State 6.图片和资源 7.淘宝镜像 7.1windows 脚本禁用&#xff08;操作策略 允许npm包的命令可执行&#xff09; 8. es6&ArkTS中…...

第二十讲 python中的异常结构-try except-else-finally

目录 1.try... except 结构 2. try... 多个except结构 3. try...except...else结构 4. try...except...finally结构 5. return语句和异常处理问题 5.1 异常处理前的 return 5.2异常处理后的 return 5.3 finally 块中的 return 6.常见的异常 1.try... except 结构 try except 是…...

springer 投稿系统中返修注意点

初次提交 初次提交时&#xff0c; manuscript 提交的是 pdf 文件 返修后提交 在经过返修之后需要提交的是注意一下几点&#xff1a; 此时提交的Blined manuscript &#xff0c;虽然名字没变&#xff0c;但不能再提交pdf 文件&#xff0c; 而需要提交的是可编辑的源文件 .te…...

CSS:display和visiblity

隐藏元素- display:none和visibility:hidden display 属性设置一个元素应如何显示&#xff0c;visibility 属性指定一个元素应可见还是隐藏。 隐藏一个元素可以通过吧display属性设置为“none”&#xff0c;或者把visibility属性设置为“hidden”。但是这两种会产生不同的结果…...

43.x86游戏实战-XXX寻找吸怪坐标

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…...

Redis地理位置相关应用

下面是一个结合 MySQL 数据库和 Redis 的地理位置服务示例&#xff0c;包含表结构、PHP 代码和 Redis 操作&#xff0c;用于处理基于地理位置的数据存储和查询。 1. 创建 MySQL 数据库表 首先&#xff0c;创建一个用于存储位置信息的 MySQL 表&#xff0c;如下所示&#xff1…...

优化WAN流量:如何通过调整系统设置降低企业网络成本

一、症状与问题背景 当电脑显示空闲状态时&#xff0c;如果满足以下条件&#xff0c;第二拨号链接可能会意外激活&#xff1a; 您正在使用基于 Microsoft Windows 的计算机&#xff0c;该计算机连接到远程网络并且是 Active Directory 域服务 (AD DS) 域的成员。 您通过二级…...

Java-HttpHeaders请求头或响应头

HttpHeaders 是 Spring Framework 中的一个类,用于封装 HTTP 头部信息。它提供了一种方便的 方式来设置 HTTP 请求头和处理 HTTP 响应头。下面分别介绍如何使用 HttpHeaders 来设置请求 头和处理响应头。 设置请求头 在发送 HTTP 请求时,可以通过 HttpHeaders 设置各种请…...

Elasticsearch高阶查询

Elasticsearch高阶查询 文章目录 Elasticsearch高阶查询相关性和相关性算分相关性 (Relevance)什么是TF-IDFBM25explain关键字Boosting如何通过Boost控制想要的文档排在前面&#xff1f; 布尔查询&#xff08;bool Query&#xff09;查询语法语法格式 单字符串多字段查询三种场…...

【流媒体】RTMPDump—RTMP_Connect函数(握手、网络连接)

目录 1. RTMP_Connect函数1.1 网络层连接&#xff08;RTMP_Connect0&#xff09;1.2 RTMP连接&#xff08;RTMP_Connect1&#xff09;1.2.1 握手&#xff08;HandShake&#xff09;1.2.2 RTMP的NetConnection&#xff08;SendConnectPacket&#xff09; 2.小结 RTMP协议相关&am…...

通过https方式访问内网IP

单位要做个用浏览器扫二维码的功能。我先在本地测试一直不成功&#xff0c;后来放到服务器上运行成功了。比较了一下&#xff0c;服务器上是https&#xff0c;但是本地没有证书。我问了一下信安的同事&#xff0c;要求二维码必须在本地扫描&#xff0c;不能上公网。所以只好在本…...

flutter 键盘弹出 都会重新Build

原因是调用MediaQuery.of(context)后&#xff0c;点击TextField组件时会导致调用build方法。 解决方法&#xff1a;在Scaffold组件的body嵌套Builder组件&#xff0c;然后设置一个BuildContext变量&#xff0c;将Builder组件中的context传递给BuildContext变量&#xff0c;然后…...

RedisDistributedLock 分布式锁

设计一个简单的 RedisDistributedLock 类&#xff0c;实现单例模式&#xff0c;并包含基本的锁定机制。这个类将使用 Redis 来管理锁&#xff0c;确保在分布式系统中资源的同步访问 import redis.clients.jedis.Jedis;public class RedisDistributedLock {private static Redi…...

Java之包装类

Java中的包装类&#xff08;Wrapper Classes&#xff09;是基本数据类型的对象包装类。Java为每个基本数据类型&#xff08;如int、char等&#xff09;提供了对应的包装类&#xff0c;使得基本类型可以被当作对象来处理。这些包装类位于java.lang包中。 包装类的用途 对象化&a…...

Linux - 权限

文章目录 一、用户二、文件 一、用户 1、Linux下有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff0c;不受限制 。 普通用户&#xff1a;在linux下做有限的事情。 超级用户的命令提示符是“…...

免费图形化nginx管理工具nginxWebUI

nginxWebUI是一款图形化管理nginx配置得工具, 可以使用网页来快速配置nginx的各项功能, 包括http协议转发, tcp协议转发, 反向代理, 负载均衡, 静态html服务器, ssl证书自动申请、续签、配置等, 配置好后可一建生成nginx.conf文件, 同时可控制nginx使用此文件进行启动与重载, 完…...

编程上的挫折不可怕,可怕的是你畏惧了

如何克服编程学习中的挫折感 编程学习之路上&#xff0c;挫折感就像一道道难以逾越的高墙&#xff0c;让许多人望而却步。然而&#xff0c;真正的编程高手都曾在这条路上跌倒过、迷茫过&#xff0c;却最终找到了突破的方法。那么&#xff0c;我是如何在Bug的迷宫中找到出口的&…...

docker逃逸手法

docker逃逸手法 基本docker操作docker 命令dockerfilesDocker Compose漏洞利用容器漏洞 基本docker操作 docker 命令 # docker拉取 docker pull # 指定版本拉取 docker pull ubuntu:22.04# 显示镜像可执行的操作 docker image # 列出存储在本地系统上的所有图像 docker image…...

3 pytest Fixture

3 pytest Fixture 3.1 通过 conftest.py 共享 fixture3.2 使用 fixture 执行配置及销毁逻辑3.3 使用 --setup-show 回溯 fixture 的执行过程3.4 使用 fixture 传递测试数据3.5 使用多个 fixture3.6 指定 fixture 作用范围3.7 使用 usefixtures 指定 fixture3.8 为常用 fixture …...

pinctl 和 gpio子系统驱动

一.设备树中添加pinctl节点模板 1.创建对应的节点 同一个外设的 PIN 都放到一个节点里面&#xff0c;打开 imx6ull-14x14-evk.dts&#xff0c;在 iomuxc 节点 中的“imx6ul-evk”子节点下添加 “pinctrl_test” 节点。添加完成以后如下所示&#xff1a; pinctrl_test:test_g…...

RocketMQ消息堆积了怎么解决?

RocketMQ 的消息堆积&#xff0c;一般都是因为客户端本地消费过程中&#xff0c;由于消费耗时过长或消费并发度较小等原因&#xff0c;导致客户端消费能力不足&#xff0c;出现消息堆积的问题。 当线上出现消息堆积的问题时&#xff0c;一般有以下几种方式来解决: 增加消费者…...

C++第十二弹 -- STL之list模拟实现

文章索引 前言模拟实现list1. ListNode节点类2. list的迭代器封装3. 反向迭代器4. list类的模拟实现测试代码 list的反向迭代器总结 前言 通过模拟实现可以让我们更加深刻的理解C底层STL的实现逻辑, 本篇就对list的底层进行模拟实现. 博客主页: 酷酷学!!! 点击关注 共同进步!…...

Destiny of Gods首轮测试正式开启,参与玩家数量突破10万

天神风云&#xff0c;波澜再兴&#xff0c;GameFi链游聚合平台Destiny of Gods首款同名数字卡牌回合制游戏首轮测试定档8月20日20:00&#xff08;GMT8&#xff09;&#xff0c;现已正式开启&#xff01; 这是一个由人、游灵和神灵共存的世界&#xff0c;历经蛮荒时期的纷争与信…...

QT聊天室基于Tcp

server.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget),server(new QTcpServer(this)) // 给服务器指针对象实例化空间{ui->setupUi(this); }Widget::~Widget() {delete ui; }…...

用什么软件做动漫视频网站好/线上营销模式有哪些

2019独角兽企业重金招聘Python工程师标准>>> RestTemplate可以使用loadBalanced&#xff0c;但加上了oauth2的restTemplate 就识别不到服务名称了。 这个是个蛋疼的问题。 查了一天的github&#xff0c;发现了这是一个bug。 spring-cloud-security问题 看了半天也没…...

网站被别人备案/直通车优化推广

1、用fixed定位做的弹出框&#xff0c;弹出框里面有文本框。fixed在ios上兼容不友好&#xff0c;会造成光标乱跳。 解决方法&#xff1a;当弹出框弹出时给父元素加上fixed定位&#xff0c;此时页面无法滚动&#xff1b;弹出框关闭时移除fixed定位&#xff0c;页面恢复正常滚动。…...

国外幼女和成人做视频网站/seo点击排名源码

在Python语言中最常见的括号有三种&#xff0c;分别是&#xff1a;小括号()、中括号[]、花括号{}&#xff1b;其作用也不相同&#xff0c;分别用来代表不同的Python基本内置数据类型。1、Python中的小括号()&#xff1a;代表tuple元祖数据类型&#xff0c;元祖是一种不可变序列…...

怎么免费做自己的网站/合肥百度推广公司哪家好

先来介绍下 media&#xff0c;确切的说应该是 CSS media queries&#xff08;CSS 媒体查询&#xff09;&#xff0c;媒体查询包含了一个媒体类型和至少一个使用如宽度、高度和颜色等媒体属性来限制样式表范围的表达式。CSS3 加入的媒体查询使得无需修改内容便可以使样式应用于某…...

建设网站的市场环境/东莞seo外包公司

1.安装bind包 yum install bind 2.创建住配置文件/etc/named.conf 在/var/named/chroot/etc目录下&#xff0c;创建配置文件named.conf 具体内容如下&#xff1a; options { directory "/var/named"; #工作目录 }; zone "****" IN …...

有没有专业做二手老车的网站/百度下载安装到桌面上

...