STL--deque

news2024/11/20 21:18:15

在这里插入图片描述

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); //头部插入1
	d.push_front(2); //头部插入2
	d.push_front(3); //头部插入3

	d.push_back(10);//尾部插入10
	d.push_back(20);//尾部插入20
	d.push_back(30);//尾部插入30

	Show(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的值全部赋值给q2
    cout << "q1:";
    Show(q1);
    cout << "q2:";
    Show(q2);
    if (q1 == q2) //判断q1是否等于q2
        cout << "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;
    else
        cout << "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,4
        d.push_back(i);

    while (!d.empty())//只要d不空,循环继续
    {
        cout << d.front() << " "; //输出头部数据
        d.pop_front(); //头删
    }
    cout << endl;

    return 0;
}

本篇完!

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

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

相关文章

jenkins+docker实现可持续自动化部署springboot项目

目录 一、前言 二、微服务带来的挑战 2.1 微服务有哪些问题 2.2 微服务给运维带来的挑战 三、可持续集成与交付概述 3.1 可持续集成与交付概念 3.1.1 持续集成 3.1.2 持续交付 3.1.3 可持续集成与交付核心理念 3.2 可持续集成优点 3.3 微服务为什么需要可持续集成 四…

anaconda虚拟环境安装apex0.1教程win10

我安装apex0.1的环境是&#xff1a;torch&#xff08;gpu&#xff09;1.8.0&#xff0c;cuda10.2&#xff0c;cuda7.6.5。 第一步&#xff1a;下载对应的pytorch、cuda、cudnn版本 这里就不详细介绍了&#xff0c;具体可以参考我的这篇博文win10中anaconda创建虚拟环境配置py…

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…

如何选择和注册域名,域名有什么作用,什么是域名解析?域名的需要多少钱?

大家好欢迎来到易极赞&#xff0c;今天我们来跟大家聊一下“如何选择和注册域名”这个话题。 域名用来做什么&#xff1f; 域名对您的网站至关重要&#xff0c;因为它代表您的品牌名称并充当网站的地址。对于企业主来说&#xff0c;一个令人难忘的域名有助于建立在线形象和客户…

RabbitMQ3.13.x之七_RabbitMQ消息队列模型

RabbitMQ3.13.x之七_RabbitMQ消息队列模型 文章目录 RabbitMQ3.13.x之七_RabbitMQ消息队列模型1. RabbitMQ消息队列模型1. 简单队列2. Work Queues(工作队列)3. Publish/Subscribe(发布/订阅)4. Routing(路由)5. Topics(主题)6. RPC(远程过程调用)7. Publisher Confirms(发布者…

嵌入式Qt QGridLayout网格布局管理器

一.QGridLayout网格布局管理器 //以行为单位 设置比例系数 void QGridLayout::setRowStretch ( int row, int stretch ) //以列为单位 设置比例系数 void QGridLayout::setColumnStretch ( int column, int stretch ) 实验&#xff1a; Widget.h&#xff1a; #ifndef _WIDGE…

了解强化学习算法 PPO

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 介绍&#xff1a; PPO 算法&#xff0c;即 Proximal Policy Optimization&#xff08;近端策略优化&#xff09;&#xff0c;是一种强化学习算法。它的主要目的是改进策略梯度方法&#xff0c;使得训练…

numpy二维与三维数组简单操作示例

1.运行PowerShell然后输入python 2.在python命令行输入 import numpy as np进入导入numpy库并添加别名为np 3.使用numpy的zeros函数创建一个2行4列的全0矩阵 4.查看上面创建的全0矩阵 5.查看矩阵类型 6.使用numpy的ones函数创建一个2行4列全1的矩阵 ,并查看类型及矩阵中的数据 …

JavaScript中堆栈内存管理机制及其在深拷贝与浅拷贝场景中的应用与解析

一.堆栈的定义 1.栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。 结论&#xff1a;后进先出&#xff08;Last In First Out&#xff09;&#xff0c;简称为LIFO线性表。 栈的应用有&#xff1a;数制转换&#xff0c;语法词法分析&…

小小总结之二分查找三种情况

小小总结之二分查找三种情况 二分查找主要难点在于&#xff1a; 起始条件 left,right的取值&#xff0c;一般若闭合区间&#xff0c;则0, length(nums)。如果涉及边界位置代入计算&#xff0c;则0,length(nums)。循环条件&#xff0c;第一要能够避免死循环&#xff0c;第二要看…

最优乘车

题目描述 H 城是一个旅游胜地&#xff0c;每年都有成千上万的人前来观光。为方便游客&#xff0c;巴士公司在各个旅游景点及宾馆&#xff0c;饭店等地都设置了巴士站并开通了一些单程巴上线路。每条单程巴士线路从某个巴士站出发&#xff0c;依次途经若干个巴士站&#xff0c;…

网络网络层之(3)IPv6地址

网络网络层之(3)IPv6协议 Author: Once Day Date: 2024年4月2日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的…

JQuery(一)---【JQuery简介、安装、初步使用、各种事件】

零.前言 在学习JQuery前&#xff0c;您需要具备以下知识&#xff1a; HTML相关知识(DOM)CSS相关知识JavaScript相关知识 一.JQuery 1.1JQuery简介 JQuery是一个JavaScript的“函数库”&#xff0c;不是JavaScript的一个框架&#xff0c;与“VUE、REACT”有本质区别&#x…

Java栈和队列的实现

目录 一.栈(Stack) 1.1栈的概念 1.2栈的实现及模拟 二.队列(Queue) 2.1队列的概念 2.2队列的实现及模拟 2.3循环队列 2.4双端队列&#xff08;Deque&#xff09; 一.栈(Stack) 1.1栈的概念 栈:一种特殊的线性表&#xff0c;其 只允许在固定的一端进行插入和删除元素操作…

【详细讲解0基础如何进入IT行业】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【HTML】常用CSS属性

文章目录 前言1、字体和文本属性2、边距和填充3、border边框4、列表属性 前言 上一篇我们学习了CSS扩展选择器以及它的继承性&#xff0c;对于页面元素样式设置相信大家都不陌生了。 这一篇我们就来看看具体都有哪些样式可以设置&#xff1f;又该如何设置&#xff1f; 喜欢的【…

爬虫 新闻网站 以湖南法治报为例(含详细注释,控制台版) V2.0 升级自定义查询关键词、时间段

目标网站&#xff1a;湖南法治报 爬取目的&#xff1a;为了获取某一地区更全面的在湖南法治报已发布的宣传新闻稿&#xff0c;同时也让自己的工作更便捷 环境&#xff1a;Pycharm2021&#xff0c;Python3.10&#xff0c; 安装的包&#xff1a;requests&#xff0c;csv&#xff…

Tailwind 4.0 即将到来:前端开发的“速度与激情”

随着前端开发技术的不断进步&#xff0c;我们每天都在寻找更快、更简洁的解决方案来提升我们的开发效率和用户体验。今天&#xff0c;我要为大家介绍一项令人振奋的新技术进展——Tailwind 4.0的来临&#xff01; 对于经常使用Tailwind的朋友们来说&#xff0c;这个消息无疑是激…

java 常见API(Objects)

定义 API就是别人定义好的工具类和工具包目的&#xff1a;避免重复造轮子&#xff0c;提升开发效率&#xff0c;更加专注于实现业务逻辑 Object 类 object类是所有类的祖宗类&#xff0c;所有的类型都是可以使用Object的方法的 最常见的三个方法&#xff1a; toString:print就会…

蓝桥杯每日一题:约数个数(质因数)

题目描述&#xff1a; 输入 n 个整数&#xff0c;依次输出每个数的约数的个数。 输入格式 第一行包含整数 n。 第二行包含 n 个整数 ai。 输出格式 共 n 行&#xff0c;按顺序每行输出一个给定整数的约数的个数。 数据范围 1≤n≤1000, 1≤ai≤10^9 输入样例&#xff…