STL--deque

在这里插入图片描述

deque

容器deque是一个双向队列(double-ended queue),可以在队列的两端进行元素的插入和删除操作。deque 和 vector 非常相似。也采用dynamic array(动态数组) 来管理元素,提供随机访向,并有着和 vector 几乎一模一样的接口。不同的是:

deque的dynamic array 头尾都开放,因此能在头尾两端进行快速插入和删除。


使用 deque之前,必须先包含头文件

#include <deque>

deque和vector相比,有如下特点:
1.两端都能快速的插入和删除元素(vector只能在尾部快速的插入和删除数据)。
2.deque的内存重分配优于vector,因为从其内部结构可以看出,deque在扩容时不必复制所有数据,而vector在内存重新分配时需要复制所有的数据。

deque和vector相似的地方:

1.在中间插入和删除数据速度相对较慢,因为要移到其它的数据。

2.迭代器属于随机访问迭代器。

2.1 定义及初始化
它的定义和操作和vector非常类似,这里做简单的介绍,具体情况可以参考vs2022帮助手册。
下表列出定义deque对象的常用方法

在这里插入图片描述


#include <iostream>
#include <deque>
using namespace std;//输出双端队列d的所有数据
void Show(const deque<int>& d)
{for (const auto& x : d)cout << x << " ";cout << endl;
}int main()
{deque<int>d0;//创建一个空的双端队列deque<int>d1(3);//创建一个包含3个0的双端队列deque<int>d2(4,2);//创建一个包含4个2的双端队列deque<int>d3{1,2,3,4,5};//创建包含1,2,3,4,5的双端队列cout << "d0:"; Show(d0);cout << "d1:"; Show(d1);cout << "d2:"; Show(d2);cout << "d3:"; Show(d3);return 0;
}

2.2 向deque对象中添加元素
最常见的做法是定义一个空的deque对象,在运行时利用push_front(头部插入),push_back(尾部插入)函数添加元素。
例如:

//输出双端队列d的所有数据
void Show(const deque<int>& d)
{for (const auto& x : d)cout << x << " ";cout << endl;
}int main()
{deque<int> d;//创建一个空的双端队列d.push_front(1); //头部插入1d.push_front(2); //头部插入2d.push_front(3); //头部插入3d.push_back(10);//尾部插入10d.push_back(20);//尾部插入20d.push_back(30);//尾部插入30Show(d);//输出d的数据return 0;
}

2.3 deque常用迭代器


int main()
{deque<int> d{1,2,3,4,5};//从头到尾输出d的数据cout << "从头到尾:";for (deque<int>::const_iterator it = d.cbegin(); it != d.cend(); ++it)cout << *it << " ";cout << endl;//所有数据扩大2倍for (auto it = d.begin(); it != d.end(); ++it)*it *= 2;//也可以使用范围for//for (auto& x : d)//	x *= 2;//从后往前输出cout << "从后往前:";for (auto it = d.rbegin(); it != d.rend(); ++it)//也可以使用crbegin()和crend()cout << *it << " ";cout << endl;return 0;
}

2.4 deque常用运算符

//输出双端队列d的所有数据
void Show(const deque<int>& d)
{for (auto& x : d)cout << x << " ";cout << endl;
}int main()
{deque<int>q1{1, 2, 3, 4, 5};deque<int>q2;q2 = q1; //把q1的值全部赋值给q2cout << "q1:";Show(q1);cout << "q2:";Show(q2);if (q1 == q2) //判断q1是否等于q2cout << "q1==q2" << endl << endl;q1[1] = 50; //通过[]修改q1的元素cout << "q1[1]=50后" << endl << "q1:";Show(q1);cout << "q2:";Show(q2);if (q1 != q2)//判断两个deque对象是否不相等cout << "q1 != q2" << endl;if (q1 < q2) //判断q1,q2的大小cout << "q1 < q2" << endl;else if (q1 > q2)cout << "q1 > q2" << endl;elsecout << "q1 == q2" << endl;return 0;
}

2.5 deque常用成员函数
在这里插入图片描述
empty成员函数
判断deque对象是否为空。
front成员函数
获取第一个元素的引用。
back成员函数
获取最后一个元素的引用。
push_front成员函数
往头部插入数据。容量不够会自动扩容。
pop_front成员函数
从头部删除数据。

int main()
{deque<int>d;//下面的操作类似队列for (int i = 0; i < 5; i++)//尾插5个数据 0,1,2,3,4d.push_back(i);while (!d.empty())//只要d不空,循环继续{cout << d.front() << " "; //输出头部数据d.pop_front(); //头删}cout << endl;return 0;
}

本篇完!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

端盒日记Day03

vocal&#xff01;&#xff01;拖了这么久我才来写&#xff0c;我好Dior。刚刚吃了四根冰淇淋我好Dior。。。 CSS 平面转换——transform 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配合使用 概念&#xff1a;改变盒子在平面内的形态&#xff08;位移、旋转…

一文学会Semaphore(信号量)

// 空出来椅子 semaphore.release(count); } } catch (Exception e){ } } }; t.setName("Thread --> " i); t.start(); } } 程序将一直执行下去&#xff0c;不会漏单&#xff0c;也不会出现椅子占用数量大于20的情况。 AQS基础 Semaphore是一种共享锁&#xf…

js的qq换肤效果

文章目录 1. 演示效果2. 分析思路3. 代码实现3.1. 方式一3.2. 方式二3.3. 整体代码 1. 演示效果 2. 分析思路 先编写样式&#xff0c;弄好布局和排版。遍历这个集合&#xff0c;对每个图片元素&#xff08;img&#xff09;添加一个点击事件监听器。可以使用 for 或者 forEach …

自动化运维工具

Ansible批处理工具 Ansible批处理工具功能图 Ansible项目架构图 一、Ansible介绍 1、Ansible简介 简介 ansible是一种自动化运维工具&#xff0c;基于paramiko模块开发&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令功能。 ansible是基于模块工作的&#xff0…

【C++11】右值引用 + 移动语义 + 完美转发(重点)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

C++学习笔记(七)

一、string字符串容器 #include <iostream>using namespace std;int main() {string name;name "hello";string str(10,w);cout << str << endl;name "hello world";string sub1(name,0,5);cout << sub1 << endl;4string…

第四百四十六回

文章目录 1. 概念介绍2. 使用方法3. 示例代码4. 经验与总结4.1 经验分享4.2 内容总结 我们在上一章回中介绍了"overlay_tooltip简介"相关的内容&#xff0c;本章回中将再谈flutter_launcher_icons包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我…

python练习三

模式A num int(input("请输入模式A的层数&#xff1a;")) for i in range(1, num 1):# 画数字for j in range(1, i 1):print(str(j) "\t", end"")print() 模式B num int(input("请输入模式B的层数&#xff1a;")) for i in ran…

Pandas中的 .map 方法

1. Pandas中的 .map 方法 在Pandas中&#xff0c;.map 方法通常用于Series对象&#xff0c;它允许你根据一个字典或者函数对Series中的每个元素进行转换。 import pandas as pd # 创建一个简单的DataFrame df pd.DataFrame({ Name: [Alice, Bob, Charlie, Alice, Bob, C…

redis-Hash

一&#xff0c;应用场景 Redis hash 是一个string类型的field和value的映射表&#xff0c;hash特别适合用于存储对象。Set就是一种简化的Hash,只变动key,而value使用默认值填充。 可以将一个Hash表作为一个对象进行存储&#xff0c;表中存放对象的信息。 二&#xff0c;命令 H…

Ubuntu18.04安装Node.js教程

在Ubuntu 18.04上安装Node并部署环境变量的过程可以分为以下几个步骤&#xff1a; 安装Node.js 您可以选择从Ubuntu的软件源直接安装Node.js&#xff0c;或者使用NodeSource提供的仓库安装特定版本的Node.js。 从Ubuntu软件源安装 运行以下命令来更新软件包列表并安装Node.js&…

【stm32】SPI通信简介

SPI通信 SPI简介部分 所有SPI设备的SCK、MOSI、MISO分别连在一起 从主机引出多根SS选择线&#xff0c;分别接到每个从机的SS输入端&#xff0c;主机的SS线都是输出&#xff0c;从机的SS线都是输入&#xff0c;SS线 是低电平有效&#xff0c;同一时间主机只能选择一个从机 只能…

LeetCode 1780. 判断一个数字是否可以表示成三的幂的和

解题思路 该题目可以等价于求三进制的数&#xff0c;把>1的数 return false,剩下的 return true. 相关代码 class Solution {public boolean checkPowersOfThree(int n) {//该题目可以等价成不断地除以3&#xff0c;当余数>1时&#xff0c;则为falsewhile(n>3){ …

cmake学习笔记1

基础概念 CMake是什么&#xff1f; CMake是一个元构建系统(meta build-system),用于生产其他构建系统文件&#xff08;如Makefile或Ninja&#xff09;。 基础操作方式 CMake使用一个CMakeLists.txt文件描述配置&#xff0c;然后使用cmake驱动这个文件生成对应构建系统文件。…

websokcet服务端实现

一/websokcet服务端实现 步骤一&#xff1a; springboot底层帮我们自动配置了websokcet&#xff0c;引入maven依赖 1 2 3 4 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</arti…

AI图片智能选区抠像解决方案

高质量的图片处理往往依赖于繁琐的手动操作&#xff0c;耗费大量时间与精力。美摄科技推出了一款革命性的AI图片智能选区抠像解决方案&#xff0c;旨在帮助企业轻松实现图片的高效处理&#xff0c;提升内容创作效率与质量。 美摄科技的AI图片智能选区抠像解决方案&#xff0c;…

AFCI 应用笔记二之数据采集

1. 简介 基于监督学习的神经网络算法需要大量数据作为输入&#xff0c;模型完全由数据驱动&#xff0c;其数据质量是算法有效的必要条件&#xff0c;所以如何高效的采集到数据&#xff0c;以及正确的标注或分析是极其重要的&#xff0c;如果第一步有问题&#xff0c;后续的所有…

C++搭建深度学习的推理框架

我们的目的是:借助C++搭建一个类似于pytorch,tensorflow的深度学习框架,对标pytorch,tensorflow实现对应的功能。由于本人能力有限,下面本人将借助C++搭建一个简单的全连接神经网络,并且尝试解释里面的算子定义和计算图构建。 算子定义 回顾pytorch里面搭建的全连接神经网…

ESP32S3网络编程学习笔记(1)—— Wi-Fi扫描实验

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动/单片机/RTOS的实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff…

基于DPDK的VPP 插件demo代码

VPP的插件编写&#xff0c; 首先要把VPP 工程下载下来&#xff0c; 编译通过。 然后按照example程序的套中来编写插件。 还有一个前提&#xff0c; 就是测试机上已经具备了DPDK 已经可用版本。 1. 下载VPP。 可以从github上下载VPP的指定版本的zip包&#xff0c; 也可以用…