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

【C++初阶学习】第十二弹——stack和queue的介绍和使用

C语言栈:数据结构——栈(C语言版)-CSDN博客

C语言队列:数据结构——队列(C语言版)-CSDN博客

前言:

在之前学习C语言的时候,我们已经学习过栈与队列,并学习过如何使用C语言来实现栈与队列,今天,我们用C++来学习这些知识,让我们探索一下其中的新的知识点

目录

一、stack(栈)

1. 栈的概述

​编辑

2. 栈的构造函数和成员函数

3. 栈的使用示例

4. 注意事项

二、queue(队列)

1. 队列的概述

​编辑

2. 队列的构造函数和成员函数

3. 队列的使用示例

4. 注意事项

三、思考题

四、总结


一、stack(栈)

C++中的stack是一种遵循后进先出原则的容器适配器。它提供了一系列标准的操作,使得用户可以方便地实现栈这种数据结构。

1. 栈的概述

在C++标准库中,stack并不直接暴露给用户,而是作为<stack>头文件中stack模板类的声明。这个类是std::deque的封装,因此默认情况下,栈是通过双端队列实现的。但是,用户也可以指定其他的容器作为栈的底层结构,比如std::vectorstd::list

2. 栈的构造函数和成员函数

栈提供了以下构造函数成员函数,以便用户可以轻松地创建和使用栈:

  • 空栈构造函数:创建一个空的栈。
  • 基于容器的构造函数:使用一个已存在的容器来初始化栈。
  • 拷贝构造函数:创建一个新栈,其内容是另一个栈的副本。

成员函数包括:

  • empty():检查栈是否为空。
  • size():获取栈中的元素数量。
  • top():返回栈顶元素的引用。
  • push(const T&):在栈顶插入一个元素。
  • pop():移除并返回栈顶元素。
  • emplace(const T&):在栈顶位置构造并插入一个元素。
  • swap(stack&):与另一个栈交换元素。

3. 栈的使用示例

以下是一个简单的使用C++栈的示例代码:

#include <iostream>
#include <stack>int main() {std::stack<int> numbers;// 压入一些数字numbers.push(1);numbers.push(2);numbers.push(3);// 打印栈顶元素std::cout << "栈顶元素: " << numbers.top() << std::endl;// 弹出栈顶元素numbers.pop();// 检查栈是否为空if (numbers.empty()) {std::cout << "栈为空" << std::endl;} else {std::cout << "栈不为空,栈中有 " << numbers.size() << " 个元素" << std::endl;}return 0;
}

运行结果:

4. 注意事项

虽然栈的使用看似简单,但在实际应用中仍然需要注意以下几点:

  • 确保不要超过栈的容量,否则可能会导致溢出。
  • 如果你需要频繁地访问栈中的元素,而不是仅仅进行 push 和 pop 操作,可能需要考虑使用其他数据结构。
  • 在模拟实现栈时,要注意内存管理,避免内存泄漏。

二、queue(队列)

C++中的queue是一种遵循先进先出原则的容器适配器。它提供了一系列标准的操作,使得用户可以方便地实现队列这种数据结构。

1. 队列的概述

在C++标准库中,queue并不直接暴露给用户,而是作为<queue>头文件中queue模板类的声明。这个类是std::deque的封装,因此默认情况下,队列是通过双端队列实现的。但是,用户也可以指定其他的容器作为队列的底层结构,比如std::list

2. 队列的构造函数和成员函数

队列提供了以下构造函数和成员函数,以便用户可以轻松地创建和使用队列:

  • 空队列构造函数:创建一个空的队列。
  • 基于容器的构造函数:使用一个已存在的容器来初始化队列。
  • 拷贝构造函数:创建一个新队列,其内容是另一个队列的副本。

成员函数包括:

  • empty():检查队列是否为空。
  • size():获取队列中的元素数量。
  • front():返回队列的第一个元素的引用。
  • back():返回队列的最后一个元素的引用。
  • push(const T&):在队列的尾部插入一个元素。
  • pop():移除并返回队列的第一个元素。
  • emplace(const T&):在队列的尾部位置构造并插入一个元素。
  • swap(queue&):与另一个队列交换元素。

3. 队列的使用示例

以下是一个简单的使用C++队列的示例代码:

#include <iostream>
#include <queue>int main() {std::queue<int> numbers;// 插入一些数字numbers.push(1);numbers.push(2);numbers.push(3);// 打印队列的第一个元素std::cout << "队列的第一个元素: " << numbers.front() << std::endl;// 打印队列的最后一个元素std::cout << "队列的最后一个元素: " << numbers.back() << std::endl;// 弹出队列的第一个元素numbers.pop();// 检查队列是否为空if (numbers.empty()) {std::cout << "队列为空" << std::endl;} else {std::cout << "队列不为空,队列中有 " << numbers.size() << " 个元素" << std::endl;}return 0;
}

运行结果:

4. 注意事项

虽然队列的使用看似简单,但在实际应用中仍然需要注意以下几点:

  • 确保不要超过队列的容量,否则可能会导致溢出。
  • 如果你需要频繁地访问队列中的元素,而不是仅仅进行 push 和 pop 操作,可能需要考虑使用其他数据结构。
  • 在模拟实现队列时,要注意内存管理,避免内存泄漏。

三、思考题

1、我们学过如何用C语言来模拟实现栈与队列,那我们如今学习了C++STL部分,请思考我们如何用C++来模拟实现栈与队列

2、上面我们讲到这两个的底层容器都是dequeue,那什么是dequeue呢?

3、我们可不可以用其他容器,如vector、list来模拟实现栈与队列?

(这些问题可以先思考一下,我们下篇再讲)

四、总结

上面就是stack和queue的介绍和使用,由于之前有过C语言的学习,所以在使用上难度不大,难的主要体现在它的底层模拟构造上,这些我们将在下一篇进行讲解

感谢各位大佬观看,创作不易,还请各位大佬一键三连!!!

相关文章:

【C++初阶学习】第十二弹——stack和queue的介绍和使用

C语言栈&#xff1a;数据结构——栈(C语言版)-CSDN博客 C语言队列&#xff1a;数据结构——队列&#xff08;C语言版&#xff09;-CSDN博客 前言&#xff1a; 在之前学习C语言的时候&#xff0c;我们已经学习过栈与队列&#xff0c;并学习过如何使用C语言来实现栈与队列&…...

nginx反向代理了解

文章目录 Nginx反向代理反向代理系统调优Proxy Buffer相关指令 Nginx 具有高性能的http和反向代理的web服务器&#xff0c;同时也是一个pop3/smtp/imap代理服务器&#xff0c;使用c语言编写 **Web服务器&#xff1a;**也叫网页服务器&#xff0c;web server&#xff0c;主要功…...

插入排序和希尔排序

目录 1.直接插入排序2.希尔排序 1.直接插入排序 基本思想&#xff1a; 把待排序的数据按其大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的数据插入完成为止。 当插入第i个元素时&#xff0c;前面的a[0],a[1],...,a[i-1]个数据已经排好序了&#xff0c;此时用…...

Java web应用性能分析之【java进程问题分析定位】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 Java web应用性能分析之【jvisualvm远程连接云服务器】-CSDN博客 由于篇幅限制、前面三篇讲了准备工作和分析小结&#xff0c;这里将详细操作java进程问题…...

c#控件笔记

c# PictureBox在工具箱的哪个位置 在 Visual Studio 的工具箱中&#xff0c;PictureBox 控件位于 “Common Controls” 部分。要找到 PictureBox&#xff0c;请按照以下步骤操作&#xff1a; 打开 Visual Studio 并加载您的项目。确保已经打开了设计器视图&#xff08;即您的…...

STM32-15-DMA

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD 文章目录 STM…...

Go语言 几种常见的IO模型用法 和 netpoll与原生GoNet对比

【go基础】16.I/O模型与网络轮询器netpoller_go中的多路io复用模型-CSDN博客 字节开源的netPoll多路复用器源码解析-CSDN博客 一、几种常见的IO模型 1. 阻塞I/O (1) 解释&#xff1a; 用户调用如accept、read等系统调用&#xff0c;向内核发起I/O请求后&#xff0c;应用程序…...

大米cms安装支付逻辑漏洞

1.安装 下载来源&#xff1a;https://www.cnblogs.com/xfbk/p/17910054.html 链接&#xff1a;https://pan.baidu.com/s/1b-Z6RaFBZ6CsSIErY46Pyg?pwdq8qq 提取码&#xff1a;q8qq 注意一下配置就可以了&#xff1a;php5.5apachemysql5.0&#xff0c;主要就是数据库版本要注…...

使用 zxing 生成二维码以及条形码

需求背景 前期在做项目的时候&#xff0c;有一个需求是说要生成一张条形码&#xff0c;并且呢将条形码插入到 excel 中去&#xff0c;但是之前一直没有搞过找个条形码或者是二维码&#xff0c;最后是做出来了&#xff0c;这里呢就先看看怎么生成&#xff0c;后面再抽时间来写写…...

发布 jar 包到 maven 中央仓库

目前开发基本都是以maven或者gradle的方式,直接引入依赖包即可,那么该咋那么发布我们自己的jar包到maven仓库,让别人使用呢?本文适用于2024.3之后的步骤 文章目录 账号准备第一步,注册账号第二步,新建命名空间第三步,验证命名空间第四步,创建 push 的账号和密码点击右…...

AI智能体研发之路-模型篇(四):一文入门pytorch开发

博客导读&#xff1a; 《AI—工程篇》 AI智能体研发之路-工程篇&#xff08;一&#xff09;&#xff1a;Docker助力AI智能体开发提效 AI智能体研发之路-工程篇&#xff08;二&#xff09;&#xff1a;Dify智能体开发平台一键部署 AI智能体研发之路-工程篇&#xff08;三&am…...

英语口语中though的用法(even though、as though)

文章目录 英语口语中 "though" 的用法详解1. "Though" 作为转折连词的用法1.1 基本用法示例句子&#xff1a; 1.2 位置灵活性示例句子&#xff1a; 2. "Though" 作为副词的用法2.1 表示对比或转折示例句子&#xff1a; 2.2 强调前述观点示例句子…...

菜刀冰蝎哥斯拉流量通讯特征绕过检测反制感知

1.加密流程 工具名称requestsresponseAntSwordbase64等方式明文冰蝎2.0开启Openssl扩展-动态密钥aes加密aes加密base64未开启Openssl扩展-异或异或base64冰蝎3.0开启Openssl扩展-静态密钥aes加密aes加密base64未开启Openssl扩展-异或异或base64哥斯拉php的为base64异或base64异…...

前端 JS 经典:判断数组的准确方法

前言&#xff1a;判断数组的方法有很多&#xff0c;但是最完美的只有一个。 1. Object.prototype.toString.call 通过 toString.call 方法来判断是否数组。 function isArray(obj) {return Object.prototype.toString.call(obj) "[object Array]"; } 缺点&#…...

【仓库设置问题】

问题&#xff1a; 某公司在高速公路一些服务站内开设了百货超市&#xff0c;为了能及时给这些百货超市提供足够的商品&#xff0c;他们需要在一些百货超市旁修建仓库。一个仓库可以同时为多家百货超市提供服务&#xff0c;以满足各个超市对商品的需求。现已知这些百货超市在高…...

深度学习知识与心得

目录 深度学习简介 传统机器学习 深度学习发展 感知机 前馈神经网络 前馈神经网络&#xff08;BP网络&#xff09; 深度学习框架讲解 深度学习框架 TensorFlow 一个简单的线性函数拟合过程 卷积神经网络CNN&#xff08;计算机视觉&#xff09; 自然语言处理NLP Wo…...

Qt for Android

文章 USB Qt for android 获取USB设备列表&#xff08;一&#xff09;Java方式 获取 Qt for android 获取USB设备列表&#xff08;二&#xff09;JNI方式 获取 Qt for android 串口库使用 Qt for android : libusb在android中使用 Qt for Android : 使用libusb做CH340x串口传…...

HTTP 的三次握手

​​​​​ HTTP 的三次握手是指在建立 TCP 连接时&#xff0c;客户端和服务器之间进行的三步握手过程。这个过程确保了双方都能够互相通信&#xff0c;并且同步了彼此的序列号和确认号。 概念&#xff1a; 第一次握手&#xff1a;客户端发送一个 SYN&#xff08;同步…...

【Text2SQL 论文】T5-SR:使用 T5 生成中间表示来得到 SQL

论文&#xff1a;T5-SR: A Unified Seq-to-Seq Decoding Strategy for Semantic Parsing ⭐⭐⭐ 北大 & 中科大&#xff0c;arXiv:2306.08368 文章目录 一、论文速读二、中间表示&#xff1a;SSQL三、Score Re-estimator四、总结 一、论文速读 本文设计了一个 NL 和 SQL 的…...

【HarmonyOS】应用屏蔽截屏和录屏

【HarmonyOS】应用屏蔽截屏和录屏 一、问题背景&#xff1a; 金融类或者高密性质的应用APP&#xff0c;对于截屏和录屏场景&#xff0c;某些业务下是禁止不允许。 目前这种场景的需求也是非常有必要的&#xff0c;很多电诈都是通过远程录屏软件&#xff0c;获取到账户密码或者…...

阅读APP书源实战手册:从入门到精通的全方位指南

阅读APP书源实战手册&#xff1a;从入门到精通的全方位指南 【免费下载链接】Yuedu &#x1f4da;「阅读」自用书源分享 项目地址: https://gitcode.com/gh_mirrors/yu/Yuedu 你是否曾因追更不同平台的小说而频繁切换应用&#xff1f;是否遇到过喜欢的作品突然下架或需要…...

OpenClaw自动化效率对比:Qwen3.5-9B-AWQ-4bit与GPT-4V多模态任务实测

OpenClaw自动化效率对比&#xff1a;Qwen3.5-9B-AWQ-4bit与GPT-4V多模态任务实测 1. 测试背景与实验设计 去年冬天&#xff0c;我在整理家庭相册时萌生了一个想法&#xff1a;能否用AI自动识别照片内容并生成描述&#xff1f;这促使我开始探索OpenClaw与多模态模型的结合。经…...

AIS_4G扩展板嵌入式驱动开发与多传感器融合实践

1. AIS_4G_EXTENSION_BOARD 硬件平台概述AIS_4G_EXTENSION_BOARD 是一款专为 AIS 4G 主控板&#xff08;基于 ESP32 的 Magellan 平台&#xff09;设计的扩展功能子板&#xff0c;采用模块化设计理念&#xff0c;集成多类工业级传感器接口与关键外设控制器。该板并非独立运行单…...

如何在VMware上运行macOS虚拟机:终极Unlocker完整指南

如何在VMware上运行macOS虚拟机&#xff1a;终极Unlocker完整指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 你是不是一直想在Windows或Linux电脑上体验macOS系统&#xff0c;却被VMware的限制挡在…...

Qwen3-14B私有部署镜像:Android Studio移动端AI应用原型开发

Qwen3-14B私有部署镜像&#xff1a;Android Studio移动端AI应用原型开发 1. 移动端AI应用开发新选择 最近在开发一个需要集成大语言模型的Android应用时&#xff0c;发现很多开发者都在寻找既强大又容易集成的AI解决方案。Qwen3-14B作为一款性能优异的中文大模型&#xff0c;…...

ERNIE-4.5-0.3B-PT医疗问答系统开发:从模型部署到前后端集成

ERNIE-4.5-0.3B-PT医疗问答系统开发&#xff1a;从模型部署到前后端集成 1. 医疗问答系统的价值与挑战 医疗咨询是每个人都会遇到的实际需求&#xff0c;但专业医疗资源有限&#xff0c;很多时候我们只是需要一些基础的医疗建议和健康指导。传统的医疗问答系统往往依赖规则匹…...

华硕笔记本合盖不休眠终极指南:GHelper合盖模式完全教程

华硕笔记本合盖不休眠终极指南&#xff1a;GHelper合盖模式完全教程 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...

SEO网络推广费用高吗_需要多少年才能收回成本

SEO网络推广费用高吗?需要多少年才能收回成本 在当今数字化经济时代&#xff0c;SEO网络推广已经成为企业提升在线可见度和吸引客户的关键手段。不少企业在决定投资SEO推广时&#xff0c;常常会对“SEO网络推广费用高吗&#xff1f;需要多少年才能收回成本”这一问题感到困惑…...

保姆级教程:用Keil5将你的STM32F103工程无缝迁移到国民技术N32G45X

从STM32F103到N32G45X&#xff1a;嵌入式工程师的国产MCU迁移实战指南 在嵌入式开发领域&#xff0c;芯片选型往往决定着项目的成败。随着国产微控制器的崛起&#xff0c;越来越多的工程师开始考虑将原有基于STM32的项目迁移到国产平台。国民技术的N32G45X系列以其出色的性价比…...

2025_NIPS_JavisGPT: A Unified Multi-modal LLM for Sounding-Video Comprehension and Generation

JavisGPT 论文核心总结与翻译 一、主要内容总结 JavisGPT 是首个面向同步音视频(sounding video)理解与生成的统一多模态大语言模型(MLLM),核心解决现有模型将音视频视为独立模态、缺乏时空同步建模的问题。 模型采用编码器-LLM-解码器架构,以 Qwen2.5-VL-7B-Instruct…...