【C++】stack、queue和deque的使用

news2024/12/23 13:36:41

💗个人主页💗
⭐个人专栏——C++学习⭐
💫点击关注🤩一起学习C语言💯💫

目录

导读

一、stack

1. stack介绍

2. stack使用

二、queue

1. queue介绍

2. queue使用

三、deque

1. deque介绍

2. deque的迭代器

3. deque使用

四、三者关系

1. STL标准库中stack和queue的底层结构


 

导读

今天我们主要来了解stack、queue、和deque的一些基本使用,下次再来说下他们的模拟实现。

其中栈和队列我们在数据结构部分就已经用C来实现了一遍,大家有兴趣的可以点进主页。

一、stack

1. stack介绍

Stack,中文翻译为"栈",是一种数据结构,在计算机科学中经常被使用。Stack的特点是先进后出(LIFO,Last In First Out),它只允许在一端进行插入和删除操作,这一端被称为栈顶。

具体的流程大姐可以点进这个链接:http://t.csdnimg.cn/OxrHQ

2. stack使用

  • 使用stack类时,需要包含<stack>头文件。
  • 栈中存储的元素类型可以是任意的,不仅限于整数类型。
  • 栈的大小没有限制,可以根据需要动态调整。
  • 在使用top()或pop()操作时,要确保栈不为空,否则会导致未定义行为。
#include <iostream>
using namespqce std;
#include <stack>
int main()
{
    //定义栈对象:
    stack<int> st;// 创建一个空的整数类型栈

    //入栈操作:
	st.push(1);
	st.push(2);
	st.push(3);
	st.push(4);
    
    
	while (!st.empty())
	{
		cout << st.top() << " ";//获取栈顶元素
        //出栈
		st.pop();
	}
	cout << endl;
    return 0;
}

二、queue

1. queue介绍

queue(队列)是一种先进先出(FIFO,First-In-First-Out)的数据结构,其中元素按照加入队列的顺序进行处理。

队列有两个基本操作:入队(enqueue)和出队(dequeue),分别指元素加入队列和从队列中移除元素。

除此之外,队列还提供了一些其他的操作,如获取队首元素、判断队列是否为空等。

具体的图解点击:http://t.csdnimg.cn/OxrHQ

2. queue使用

  • 使用queue类时,需要包含<queue>头文件。
  • 队列中存储的元素类型可以是任意的,不仅限于整数类型。
  • 队列的大小没有限制,可以根据需要动态调整。
  • 在使用front()、pop()操作时,要确保队列不为空,否则会导致未定义行为。
#include <iostream>
using namespace std;
#include <queue>
int main()
{
    //定义队列对象:
    queue<int> q;//创建一个空的整数类型队列

    //入队操作
	q.push(1);
	q.push(2);
    
    
	cout << q.front() << " ";//获取队首元素
	q.pop();// 出队

	q.push(3);
	q.push(4);

	while (!q.empty())//判空
	{
		cout << q.front() << " ";
		q.pop();
	}
	cout << endl;
    return 0;
}

三、deque

1. deque介绍

deque(双端队列)是一种能够在两端进行操作的数据结构。

deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组。

它既可以在前端进行插入和删除操作,也可以在后端进行插入和删除操作。

deque的特点包括:

  1. 可以在队列的任一端进行插入和删除操作,也就是说可以在队列的前端(头部)和后端(尾部)进行操作。
  2. deque的大小可以动态调整,可以根据需要增加或减少元素。
  3. deque中的元素在内存中是连续存储的,这使得访问元素的速度比较快。
  4. deque不需要预留内存空间,可以根据需要动态分配内存。

deque与vector相似,但deque具有更高的插入和删除元素的性能,因为它允许在队列的两端进行操作。但与之相比,deque的随机访问性能略低,因为deque中的元素并不是像vector那样在内存中是连续存储的。

2. deque的迭代器

双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落在了deque的迭代器身上,因此deque的迭代器设计就比较复杂。

int main()
{
    deque<int> mydeque = { 1, 2, 3, 4, 5 };

    for (deque<int>::iterator it = mydeque.begin(); it != mydeque.end(); ++it) 
    {
        cout << *it << " ";
    }
    cout << endl;
    return 0;
}

3. deque使用

#include <iostream>
using namespace std;
#include <deque>

int main()
{
    deque<int> myDeque; // 创建一个整数类型的双端队列

    // 在前端插入元素
    myDeque.push_front(3);
    myDeque.push_front(2);
    myDeque.push_front(1);

    // 在后端插入元素
    myDeque.push_back(4);
    myDeque.push_back(5);
    myDeque.push_back(6);

    // 打印双端队列的元素
    cout << "双端队列元素: ";
    for (auto element : myDeque) 
    {
        cout << element << " ";
    }
    cout << endl;

    // 删除前端元素
    myDeque.pop_front();

    // 删除后端元素
    myDeque.pop_back();

    // 获取前端元素
    int frontElement = myDeque.front();
    cout << "前端元素: " << frontElement << endl;

    // 获取后端元素
    int backElement = myDeque.back();
    cout << "后端元素: " << backElement << endl;

    // 获取双端队列大小
    int dequeSize = myDeque.size();
    cout << "双端队列大小: " << dequeSize << endl;

    // 判断双端队列是否为空
    bool isEmpty = myDeque.empty();
    cout << "是否为空? " << (isEmpty ? "Yes" : "No") << endl;

    return 0;
}

四、三者关系

1. STL标准库中stack和queue的底层结构

虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配 器,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque。

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

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

相关文章

软件安全漏洞分析与发现 复习笔记

1 绪论 本节无考点&#xff0c;仅供了解。 2 基础知识 考点&#xff1a; 汇编码理解和撰写&#xff0c;三种内存地址&#xff0c;不同的页管理方式。windows保护模式可能出题 汇编算法的阅读理解给出汇编片段&#xff0c;理解其意思&#xff0c;输入->输出保护模式…

基于MBD的大飞机模块化广域协同研制

引言 借鉴国外航空企业先进经验&#xff0c;在国内&#xff0c;飞机型号的研制通常采用基于模型定义&#xff08;MBD&#xff09;的三维数模作为唯一的设计制造协同数据源&#xff0c;从而有效减少了设计和制造部门之间的模型沟通成本和重构所需的时间&#xff0c;也减少或避免…

(2)图像识别yolov5—识别图片视频等文件

目录 一、识别示例图片 二、识别视频 三、修改 detect.py 代码以输出物体坐标,更改识别方式 四、更改后的演示代码: 一、识别示例图片 在yolov5文件夹中,有两个示例图片,这里我们对示例图片进行识别。 打开命令行,进入到当前yolov5目录,通过运行下面的指令,然后对…

ARM32开发--RTC内置实时时钟

知不足而奋进 望远山而前行 目录 系列文章目录 文章目录 前言 学习目标 学习内容 RTC时钟介绍 RTC结构框图 RTC原理图 RTC时钟电源 RTC的配置流程 RTC时钟 开发流程 RTC初始化 时钟配置 时钟获取 BCD格式转化 完整代码 RTC时钟备份寄存器 总结 前言 在嵌入式…

小众宝藏工作软件大公开

嘿宝贝们&#xff01;&#x1f44b; 今天要跟大家种草几款超实用但相对小众的工作软件&#xff0c;让你的工作效率直线上升&#xff0c;还能享受工作的乐趣哦&#xff01;&#x1f4bc;&#x1f389; 1️⃣ 亿可达 - 作为一款自动化工具&#xff0c;亿可达被誉为国内版的免费Z…

MT2094 甜品供应

思路&#xff1a; 贪心策略&#xff1a;手下按r进行从小到大排序。用小根堆存储甜品。如果堆顶甜品无法被当前手下满足&#xff0c;则将甜品放回堆中&#xff0c;看下一个手下能不能满足。 代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N …

新渠道+1!TDengine Cloud 入驻 Azure Marketplace

近日&#xff0c;TDengine Cloud 正式入驻微软云 Marketplace&#xff0c;为全球更多用户带来全托管的时序数据处理服务。这一举措也丰富了 TDengine 的订阅渠道&#xff0c;为用户提供了极大的便捷性。现在&#xff0c;您可以通过微软云 Marketplace 轻松订阅并部署 TDengine …

基于51单片机公交车报站系统—显示时间温度

基于51单片机公交车报站系统 &#xff08;仿真&#xff0b;程序&#xff09; 功能介绍 具体功能&#xff1a; 1.用LCD12864播报站台&#xff0c;显示当前站台和下一站&#xff0c;当前时间和温度&#xff1b; 2.站台名为一号到四号&#xff0c;下行从一号到四号&#xff0c;…

力反馈设备的融入让虚拟装配训练更具沉浸感

随着科技的快速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术已经在各个领域得到了广泛应用。其中&#xff0c;虚拟装配训练作为虚拟制造的重要组成部分&#xff0c;对于提高装配效率、降低设计成本以及提升产品质量具有至关重要的作用。然而&#xff0c;传统的虚拟…

大模型排行榜出炉!第一名不是ChatGPT!

前言 现在科技圈什么最火&#xff1f;当属大模型。 如雨后春笋般冒出的大模型&#xff0c;每一个都在争做行业No.1&#xff0c;但你知道现在哪个大模型能力最强&#xff1f;哪个最受人喜欢吗&#xff1f; 近期&#xff0c;清华大学发布《SuperBench大模型综合能力评测报告》…

【启明智显分享】2D图形加速和JPEG解码如何实现高质量图形传输(以Model3A 7寸触摸屏为例)

自从1951年在旋风计算机上成功显示图形开始&#xff0c;人类致力于计算机处理图形的不发就从来没有停止过。随着技术的发展&#xff0c;人们对图形图像处理能力的期望也越来越高。计算机图形图像处理能力的提高与高运算能力的处理器和图像处理技术都有着紧密的联系。 今天&…

电脑意外出现user32.dll丢失的八种修复方法,有效解决user32.dll文件丢失

遇到与 user32.dll 相关的错误通常是因为该文件已损坏、丢失、或者与某些软件冲突。今天这篇文章寄给大家介绍八种修复user32.dll丢失的方法&#xff0c;下面是一步步的详细教程来解决这个问题。 1. 重新启动电脑 第一步总是最简单的&#xff1a;重新启动你的电脑。许多小问题…

MQTT通讯协议接入

1.MQTT协议概述 MQTT是一种基于发布/订阅模式的轻量级消息传输协议&#xff0c;常用于低带宽、不可靠网络环境下传输消息&#xff0c;适用于物联网设备之间的通信。 1.1 MQTT协议的组件 客户端&#xff08;Client&#xff09;&#xff1a;连接到MQTT代理服务器的设备&#xff…

怎么把flv格式转成mp4?教你四种简单好用的转换方法!

怎么把flv格式转成mp4&#xff1f;FLV文件格式&#xff0c;曾经以其独特的方式在视频传输领域崭露头角&#xff0c;如今却似乎被时代的洪流逐渐淹没。其新颖之处虽然为视频传输界带来了一抹亮色&#xff0c;但随之而来的挑战也不容忽视&#xff0c;首当其冲的便是兼容性问题。由…

HLS入门---流水灯闪烁

文章目录 1.HLS简介2.led闪烁实验2.1 函数撰写 1.HLS简介 HLS&#xff08;High-Level Synthesis&#xff0c;高级综合&#xff09;是一种将高级硬件描述语言&#xff08;如C/C&#xff09;转换为硬件描述语言&#xff08;如Verilog或VHDL&#xff09;的过程。这种技术允许设计…

推荐一款WPF绘图插件OxyPlot

开始 使用 NuGet 包管理器添加对 OxyPlot 的引用&#xff08;如果要使用预发布包&#xff0c;请参阅下面的详细信息&#xff09;向用户界面添加PlotView在代码中创建一个PlotModel绑定到你的属性PlotModelModelPlotView 例子 您可以在代码存储库的文件夹中找到示例。/Source/Ex…

录取查询小程序怎么制作?

招生老师往往需要花费大量的时间和精力去手动整理学生的录取信息&#xff0c;并一一通知学生。那时的录取查询系统&#xff0c;复杂而繁琐&#xff0c;要处理大量的数据&#xff0c;还要确保信息的准确无误和安全。经常为了发布录取结果&#xff0c;不得不加班到深夜&#xff0…

盲盒小程序 跨平台兼容性测试策略:打造无缝体验

在盲盒小程序的开发过程中&#xff0c;跨平台兼容性测试是确保应用在不同设备和操作系统上都能提供无缝体验的重要步骤。本文将探讨一些关键的跨平台兼容性测试策略&#xff0c;以助力开发者打造稳定、流畅的小程序。 一、明确测试目标 在进行跨平台兼容性测试之前&#xff0…

【数据结构 |集合框架、泛型】初始集合框架、时间(空间)复杂度、简单认识泛型

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; &#x1f388;丠丠64-CSDN博客&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起…

DDei在线设计器-属性编辑器

DDei-Core-属性编辑器 DDei-Core-属性编辑器插件包含了文本、大文本、数值、下拉、单选、勾选以及颜色等属性编辑。 图形和属性共同构成一个完整的定义&#xff0c;属性编辑器就是编辑属性值的控件。当选中图形实例时&#xff0c;属性面板就会展现当前实例的所有属性以及属性编…