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

C++容器——deque

deque容器

定义:动态数组,是一种双向开口的线性容器,意味着你不仅可以像在普通队列的末尾添加和移除元素,还可以在前端执行这些操作。


与其他容器相比不同的点:

与vector的主要区别:

连续性:

vector保证了内存的连续性,而deque不保证。

插入/删除效率:

在序列的中间插入或删除元素时,deque通常比vector更高效,因为它不需要重

排列所有后续元素。但在尾部或头部操作上,两者都很快。

随机访问:

两者都支持随机访问,但vector的随机访问速度通常更快,因为它的内存布局更为简单直接。

特点和功能:

随机访问:

deque支持随机访问迭代器,它的内部结构可能由多个连续的内存块组成。

动态增长:

deque在需要时自动调整其容量,但它并不保证内存的连续性,与vector不同,deque通过管理多个小块内存来实现这一点。

插入和删除效率:

在deque的开头、结尾或任何位置插入和删除元素都非常高效,特别是对于开头和结尾的操作,因为它们不需要移动大量元素。

内部结构:

deque内部有一个中控器维护着多个缓冲区的地址,每个缓冲区存储一部分数据,实际上是由多个分散的内存块组成的。

构造与操作:

deque提供了多种构造函数用于初始化,以及诸如size(), resize(), erase()等方法来进行大小调整和元素操作。


deque容器使用流程

  1. 使用元组需要加入头文件<deque>
  2. deque容器的定义及初始化
  3. deque容器的使用

加入头文件 

#include<deque>

 deque容器的定义及初始

有五种常用的类型与其他容器的定义与初始化差不多

std::deque<int> first(3); // 创建含有5个默认初始化元素的deque容器std::deque<int> secend = {1, 2, 3}; // 使用花括号列表初始化deque容器std::deque<int> third(3, 10); // 创建含有3个值为10的元素的deque容器std::vector<int> v = {1, 2, 3};
std::deque<int> fourth(v.begin(), v.end()); // 使用迭代器范围初始化deque容器std::deque<int> fifth;
myDeque.assign({1, 2, 3}); // 使用花括号列表初始化deque容器

 deque容器的使用

添加和删除元素

#include<iostream>
#include<deque>
int main()
{std::deque<int> d{1,2,3};d.push_back(1);  // 在队尾添加元素1d.push_front(2); // 在队头添加元素2d.pop_back();    // 删除队尾元素d.pop_front();   // 删除队头元素auto it = d.begin(); // 获取迭代器指向第一个元素d.insert(it, 9);     // 在第一个元素前插入9auto p = d.begin() + 1; // 插入位置在第二个元素之后d.insert(p, 5, 8);      // 在指定位置插入5个8deque<int> another = {4, 5, 6};d.insert(d.end(), another.begin(), another.end()); // 在deque末尾插入another deque的全部元素return 0;
}

访问元素

四种访问方式: 

#include<iostream>
#include<deque>
int main()
{std::deque<int> d{1,2,3};int first = d.front();     // 访问第一个元素int secend = d.back();     // 访问最后一个元素int third = d[1];          // 访问下标为1的元素,不检查下标越界int fourth = d.at(1);      // 访问下标为1的元素,会检查下标越界std::cout << first << std::endl;std::cout << secend << std::endl;std::cout << third << std::endl;std::cout << fourth << std::endl;return 0;
}//输出的结果是
1
3
2
2

 获取/改变容器大小

#include<iostream>
#include<deque>
int main()
{std::deque<int> d;bool is = d.empty(); // 检查deque是否为空,空为1,不空为0size_t size = d.size(); // 获取deque中的元素个数//d.resize(10); // 改变deque的尺寸到10,可能会创建新的元素或删除现有元素std::cout << is;return 0;
}//输出结果是
1

 清除容器

使用clear()

#include<iostream>
#include<deque>
int main()
{std::deque<int> d{1,2,3};d.clear();return 0;
}

相关文章:

C++容器——deque

deque容器 定义&#xff1a;动态数组&#xff0c;是一种双向开口的线性容器&#xff0c;意味着你不仅可以像在普通队列的末尾添加和移除元素&#xff0c;还可以在前端执行这些操作。 与其他容器相比不同的点&#xff1a; 与vector的主要区别&#xff1a; 连续性&#xff1a;…...

docker-compose安装es+kibana 8.12.2

小伙伴们&#xff0c;你们好&#xff0c;我是老寇&#xff0c;我又回来辣&#xff0c;几个月不见甚是想念啊&#xff01;&#xff01;&#xff01; 因云平台需要改造&#xff0c;es7升级为es8&#xff0c;所以记录一下&#xff0c;es8需要开启ssl认证&#xff0c;需要配置证书…...

websevere服务器从零搭建到上线(二)|Linux上的五种IO模型

文章目录 阻塞 blocking非阻塞 non-blockingIO复用 IO multiplexing信号驱动 signal-driven异步 asynchronous拓展知识 看过上篇文章英国基本能理解本文五张图的内容websevere服务器从零搭建到上线&#xff08;一&#xff09;&#xff5c;阻塞、非阻塞、同步、异步 本文要能够在…...

STM32外设编程指南:GPIO、UART、SPI和I2C

STM32外设编程是嵌入式系统开发中的重要组成部分。以下是对STM32中GPIO&#xff08;通用输入输出&#xff09;、UART&#xff08;通用异步接收传输器&#xff09;、SPI&#xff08;串行外设接口&#xff09;和I2C&#xff08;互连集成电路&#xff09;等常见外设的编程指南&…...

git对远程和本地分支进行重命名

要同时对Git的远程和本地分支进行重命名&#xff0c;你需要分几个步骤操作&#xff1a; 重命名本地分支 切换到其他分支&#xff1a;在重命名当前分支之前&#xff0c;确保你不在你想要重命名的那个分支上。你可以通过以下命令切换到另一个分支&#xff08;比如切换到master分…...

if 语句逻辑判断顺序

C 里面写if语句的时候是按照书写顺序来判断的&#xff0c;不好意思我之前没有考虑过这个问题&#xff1b; 如if(path.back nums[i] && !path.empty())&#xff0c;当path为空时&#xff0c;就会报错&#xff0c;因为编译器先判断的前面的path.back nums[i]&#xff0…...

第IV章-Ⅱ Vue3中的插槽使用

第IV章-Ⅱ Vue3中的插槽使用 基本插槽默认内容 具名插槽作用域插槽 在 Vue 3 中&#xff0c;插槽&#xff08;slots&#xff09;是一种强大的模式&#xff0c;用于将模板代码从父组件注入到子组件中&#xff0c;使得子组件的内容可以在使用时被自定义。Vue 3 中的插槽用法包括基…...

【半个月我拿下了软考证】软件设计师高频考点--系统化教学-网络安全

&#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件设计师考点暴击 ⭐&#x1f170;️进入狂砍分⭐ ⭐软件设计师高频考点文档&#xff0c; ⭐软件设计师高频考点专栏 ⭐软件设计师高频考点⭐ &#x1f3b6;&#xff08;A) 考点1&#xff0c;网络攻击 理解记忆 &#…...

E2PROM读写函数

void EEP_write(u8 add,u8 date) {I2CStart();I2CSendByte(0xa0);I2CWaitAck();I2CSendByte(add);I2CWaitAck();I2CSendByte(date);I2CWaitAck();I2CStop();HAL_Delay(5); }这段代码是一个用于向一个I2C设备写入数据的函数。 函数定义: void EEP_write(u8 add,u8 data)这定义…...

MySql中什么是回表? 如何减少回表的次数

背景 在InnerDB中&#xff0c; B数的叶子节点存储数据的索引是聚集索引&#xff0c;也就是我们说的主键索引&#xff0c;而B数的叶子节点存储主键索引的是非聚集索引&#xff0c;也就是其他的索引 普通索引 唯一索引 组合索引&#xff0c;也就是非主键索引&#xff0c;在InnerD…...

【Linux】目录和文件相关的命令,补充:centos7系统目录结构

【Linux】Linux操作系统的设计理念之一就是“一切皆文件”&#xff08;Everything is a file&#xff09;&#xff0c;即将设备、文件等都当作“文件”处理。 “文件”主要类型有&#xff1a;目录&#xff08;即文件夹&#xff09;&#xff0c;链接文档&#xff08;即快捷方式…...

【读点论文】SAM-LIGHTENING: A LIGHTWEIGHT SEGMENT ANYTHING MODEL,改进自注意力机制,然后知识蒸馏提点

SAM-LIGHTENING: A LIGHTWEIGHT SEGMENT ANYTHING MODEL WITH DILATED FLASH ATTENTION TO ACHIEVE 30 ACCELERATION ABSTRACT 分割任意模型&#xff08;SAM&#xff09;由于其零样本泛化能力&#xff0c;在分割任务中引起了广泛的关注。然而&#xff0c;SAM在现实世界实践中…...

PostgreSQL函数和运算符

PostgreSQL为内置的数据类型提供了大量的函数和运算符&#xff0c;用户也可以定义自己的函数和运算符&#xff0c;使用psql命令\df和\do可以列出所有可用的函数和运算符 1. 逻辑运算符 常用的逻辑运算符有AND、OR、NOT&#xff0c;逻辑系统有三个值true、fase和null&#xff…...

使用网络工具监控网络性能

网络工具和实用程序有助于有效地检测网络问题&#xff0c;诊断其原因和位置&#xff0c;以及缓解和解决问题&#xff0c;这有助于确保网络环境的稳定性&#xff0c;使用户免受设备连接问题带来的麻烦。 网络工具已经成为每个网络管理员用于有效诊断和处理网络问题的解决方案中…...

Gradle基础笔记

配置镜像 修改 gradle>wrapper>gradle-wrapper.properties distributionUrlhttps://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.6-all.zip 配置父项目 使用 subprojects 编码问题处理 [compileJava, compileTestJava, javadoc].options.encoding ‘UTF-…...

QT+网络调试助手+TCP客户端

一、网络调试助手UI界面 编程主要思路&#xff1a; 首先将水平的控件 水平布局 &#xff0c;然后相对垂直的控件 垂直布局 &#xff0c;哪怕是底下的groupBox也需要和里面的内容 水平布局&#xff0c;然后最后框选全部 栅格布局。如果需要界面自适应窗口大小&#xff0c…...

数据库调优-SQL语句优化

2. SQL语句优化 sql 复制代码 # 请问这两条SQL语句有什么区别呢&#xff1f;你来猜一猜那条SQL语句执行查询效果更好&#xff01; select id from sys_goods where goods_name华为 HUAWEI 麦芒7 魅海蓝 6G64G 全网通; ​ select id from sys_goods where goods_id14967325985…...

h函数 render函数 JSX基本用法

1.1认识h函数&#xff08;hyperscript工具 基于JavaScript编写模板的工具&#xff09; Vue推荐在绝大多数情况下使用模板来创建你的HTML&#xff0c;然后一些特殊的场景&#xff0c;需要JavaSript的完全编程能力&#xff0c;可以使用渲染函数&#xff0c;它比模板更接近编译器&…...

购物车操作

添加购物车&#xff1a; 需求分析和接口设计&#xff1a; 接口设计&#xff1a; 请求方式&#xff1a;POST 请求路径&#xff1a;/user/shoppingCart/add请求参数&#xff1a;套餐id、菜品id、口味返回结果&#xff1a;code、data、msg 数据库设计&#xff1a; 这上面出现了…...

华为手机 鸿蒙系统-android studio识别调试设备,开启adb调试权限

1.进入设置-关于手机-版本号&#xff0c;连续点击7次 认证&#xff1a;有锁屏密码需要输入密码&#xff0c; 开启开发者配置功能ok 进入开发者配置界面 打开调试功能 重新在androd studio查看可运行running devices显示了&#xff0c; 不行的话&#xff0c;重启一下android …...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...