【C++】STL详解(七)—stack和queue的介绍及使用

✨ 坚持用 清晰易懂的图解 + 代码语言, 让每个知识点都 简单直观
🚀 个人主页 :不呆头 · CSDN
🌱 代码仓库 :不呆头 · Gitee
📌 专栏系列

  • 📖 《C语言》
  • 🧩 《数据结构》
  • 💡 《C++》
  • 🐧 《Linux》

💬 座右铭“不患无位,患所以立。”

在这里插入图片描述


【C++】STL详解(七)—stack和queue的介绍及使用

  • 前言
  • 目录
    • 一、stack
      • 1. stack的介绍
      • 2. stack的定义方式
        • 2.1 使用默认的适配器定义栈
        • 2.2 方式二:使用特定的适配器定义栈
      • 3.stack的使用
    • 二、queue
      • 1. queue的介绍
      • 2. queue的定义方式
        • 2.1 使用默认的适配器定义队列
        • 2.2 使用特定的适配器定义队列
      • 3.queue的使用
    • 三、总结


前言

🚀 欢迎来到《C++修炼之路》!

这里是C++程序员的成长乐园,带你领略从面向对象到现代C++的精彩世界。我们将>用简洁的代码和生动的案例,助你掌握C++核心精髓。

🔍 专栏亮点:

  • 现代C++特性解析(C++11/14/17)
  • STL源码剖析与实战应用
  • 内存管理与性能优化技巧

💡 收获预期:
✔️ 写出更健壮的C++代码
✔️ 深入理解面向对象设计
✔️ 掌握模板编程基础

📌 编程箴言:

“好的C++代码就像好酒,需要时间沉淀。”

(正文开始👇)


目录

一、stack

1. stack的介绍

在这里插入图片描述

C++98中stack 的构造函数 explicit stack(const container_type& ctnr = container_type()) 表示:stack 是一个容器适配器,内部需要一个底层容器(默认是 deque<T>)来存储元素;如果不传参数,就会默认构造一个空的底层容器来初始化空栈;如果传入一个已有容器,就会以该容器的内容来初始化栈,且栈顶对应容器的最后一个元素。这里的 explicit 关键字用来禁止隐式转换,也就是说不能直接用一个容器赋值给 stack,必须显式构造。

专门用于具有后进先出的上下文环境中,其只能从元素的一端进行插入和提取操作。
在这里插入图片描述


2. stack的定义方式

2.1 使用默认的适配器定义栈
stack<int> st1;

注意: 如果没有为stack指定特定的底层容器,默认情况下使用deque。

2.2 方式二:使用特定的适配器定义栈
stack<int, vector<int>> st2;
stack<int, list<int>> st3;

3.stack的使用

stack 常用函数速查表

函数功能说明示例
push(const T& x)元素入栈(放到栈顶)s.push(10);
pop()删除栈顶元素(不返回值)s.pop();
top()访问栈顶元素(返回引用)int x = s.top();
empty()判断栈是否为空,空返回 trueif(s.empty()) ...
size()返回栈中元素个数cout << s.size();
swap(stack& other)与另一栈交换内容s1.swap(s2);
  • stack 没有提供遍历迭代器,也没有随机访问功能。
  • 想查看所有元素,只能不断 pop() 出来。
#include<iostream>
#include<vector>
#include<stack>
using namespace std;int main()
{stack<int, vector<int>> st;stack<int, vector<int>> st1;st.push(5);st.push(2);st.push(0);st.push(2);st.push(0);cout << st.size() << endl;while (!st.empty()){cout << st.top() << " ";st.pop();}cout << endl;st1.push(6);st1.push(6);st1.push(6);st.swap(st1);while (!st.empty()){cout << st.top() << " ";st.pop();}cout << endl;return 0;
}

测试结果:
在这里插入图片描述


二、queue

1. queue的介绍

在这里插入图片描述

queue 的构造函数 explicit queue(const container_type& ctnr = container_type()) 表示:queue 作为容器适配器,内部需要一个底层顺序容器(默认是 deque<T>)来完成先进先出的队列操作;如果不传参数,就默认用一个空的底层容器初始化一个空队列;如果传入一个已有容器,就会用该容器的内容来初始化队列,其中队首对应底层容器的第一个元素,队尾对应最后一个元素;而 explicit 关键字则用于禁止隐式转换,只能显式地通过容器构造 queue,不能直接赋值转换。

专门用在具有先进先出操作的上下文环境中,其只能从容器的一端插入元素,另一端提取元素。
在这里插入图片描述


2. queue的定义方式

2.1 使用默认的适配器定义队列
queue<int> qu;

注意: 如果没有为queue指定特定的底层容器,默认情况下使用deque。

2.2 使用特定的适配器定义队列
queue<int,vector<int>> qu1;
queue<int,list<int>> qu2;

3.queue的使用

queue 常用函数速查表

函数功能说明示例
push(const T& x)元素入队(放到队尾)q.push(10);
pop()删除队首元素(不返回值)q.pop();
front()访问队首元素(返回引用)int x = q.front();
back()访问队尾元素(返回引用)int y = q.back();
empty()判断队列是否为空,空返回 trueif(q.empty()) ...
size()返回队列中元素个数cout << q.size();
swap(queue& other)与另一队列交换内容q1.swap(q2);
  • queue 没有提供迭代器和随机访问功能。
  • 想遍历所有元素,需要不断 pop() 出队。
#include<iostream>
#include<queue>
#include<list>
using namespace std;int main()
{queue<int, list<int>> qu;queue<int, list<int>> qu1;qu.push(5);qu.push(2);qu.push(0);qu.push(2);qu.push(0);cout << qu.size() << endl;while (!qu.empty()){cout << qu.front() << " ";qu.pop();}cout << endl;qu1.push(6);qu1.push(6);qu1.push(6);qu.swap(qu1);while (!qu.empty()){cout << qu.front() << " ";qu.pop();}cout << endl;return 0;
}

在这里插入图片描述


三、总结

不是呆头梳理了 stack 与 queue 的构造方式、常用函数以及典型用法:stack 主打 后进先出(LIFO),适合用在函数调用、表达式求值等场景;queue 主打 先进先出(FIFO),常用于任务调度、消息传递等场合。它们虽然功能简单,但在实际开发中却是高效而常用的工具。掌握好这两个适配器容器,不仅能帮我们写出更清晰的逻辑结构,也能为后续深入理解 STL 更复杂的容器与算法 打下坚实基础。


不是呆头将一直坚持用清晰易懂的图解 + 代码语言,让每个知识点变得简单!
👁️ 【关注】 看一个非典型程序员如何用野路子解决正经问题
👍 【点赞】 给“不写八股文”的技术分享一点鼓励
🔖 【收藏】 把这些“奇怪但有用”的代码技巧打包带走
💬 【评论】 来聊聊——你遇到过最“呆头”的 Bug 是啥?
🗳️ 【投票】 您的投票是支持我前行的动力
技术没有标准答案,让我们一起用最有趣的方式,写出最靠谱的代码! 🎮💻

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

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

相关文章

深度学习周报(9.8~9.14)

目录 摘要 Abstract 1 LSTM相关网络总结与对比 1.1 理论总结 1.2 代码运行对比 2 量子计算入门 3 总结 摘要 本周首先总结了LSTM、Bi-LSTM与GRU的区别与优缺点&#xff0c;对比了三者实战的代码与效果&#xff0c;还另外拓展了一些循环神经网络变体&#xff08;包括窥视…

Quat 四元数库使用教程:应用场景概述

基础概念 四元数是一个包含四个元素的数组 [x, y, z, w]&#xff0c;其中 x,y,z表示虚部&#xff0c;w 表示实部。单位四元数常用于表示3D空间中的旋转。 1. 创建和初始化函数 create() - 创建单位四元数 应用场景&#xff1a;初始化一个新的四元数对象&#xff0c;通常作为其他…

【Java后端】Spring Boot 多模块项目实战:从零搭建父工程与子模块

如何用 Spring Boot 搭建一个父工程 (Parent Project)&#xff0c;并在其中包含多个子模块 (Module)&#xff0c;适合企业级项目或者需要分模块管理的场景。Spring Boot 多模块项目实战&#xff1a;从零搭建父工程与子模块在日常开发中&#xff0c;我们经常会遇到这样的需求&am…

企业级AI会议系统技术实现:快鹭如何用AI重构会议全流程

摘要 本文深度解析快鹭AI会议系统的核心技术架构&#xff0c;重点探讨其在语音识别、自然语言处理、数据集成和安全防护等方面的技术实现。通过对比传统会议系统的技术痛点&#xff0c;分析快鹭AI如何通过技术创新实现会议筹备时间减少67%、数据调取速度提升100倍的显著效果。…

【CSS学习笔记3】css特性

1css三大特性 1.1层叠性&#xff1a;就近原则&#xff0c;最新定义的样式 1.2继承性&#xff1a;子标签集成父标签的样式&#xff0c;如文本和字号 行高的继承&#xff1a;不加单位指的是当前文字大小的倍数 body {font: 12px/1.5 Microsoft YaHei;color: #be1313;} div {…

[C语言]常见排序算法①

1.排序的概念及常见的排序算法排序在咱们日常生活中十分的常见&#xff0c;就好比是网上购物的时候通常能够选择按照什么排序&#xff0c;比如价格、评论数量、销量等。那么接下来咱们就来了解一些关于排序的概念。排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xf…

文献阅读笔记:RS电子战测试与测量技术文档

信息来源&#xff1a;罗德与施瓦茨&#xff08;Rohde & Schwarz&#xff09;公司关于电子战&#xff08;Electronic Warfare, EW&#xff09;测试与测量解决方案专业技术文档。 该文档由台湾地区应用工程师Mike Wu撰写&#xff0c;核心围绕电子战基础、雷达系统、实战应用及…

别再纠结 Postman 和 Apifox 了!这款开源神器让 API 测试更简单

别再纠结 Postman 和 Apifox 了&#xff01;这款开源神器让 API 测试更简单&#x1f525; 作为一名开发者&#xff0c;你是否还在为选择 API 测试工具而纠结&#xff1f;Postman 太重、Apifox 要联网、付费功能限制多&#xff1f;今天给大家推荐一款完全免费的开源替代方案 ——…

微调神器LLaMA-Factory官方保姆级教程来了,从环境搭建到模型训练评估全覆盖

1. 项目背景 开源大模型如LLaMA&#xff0c;Qwen&#xff0c;Baichuan等主要都是使用通用数据进行训练而来&#xff0c;其对于不同下游的使用场景和垂直领域的效果有待进一步提升&#xff0c;衍生出了微调训练相关的需求&#xff0c;包含预训练&#xff08;pt&#xff09;&…

创建其他服务器账号

✅ 在 /home74 下创建新用户的完整步骤1. 创建用户并指定 home 目录和 shellsudo useradd -m -d /home74/USERNAME -s /bin/bash USERNAME-m&#xff1a;自动创建目录并复制 /etc/skel 默认配置文件&#xff08;.bashrc 等&#xff09;。-d&#xff1a;指定用户 home 路径&…

【WebGIS】Vue3使用 VueLeaflet + 天地图 搭建地图可视化平台(基础用法)

初始化 创建项目 nodejs 18.0.6npm 9.5.1 引入地图服务 VueLeaflet GitHub - vue-leaflet/vue-leaflet&#xff1a; vue-leaflet 与 vue3 兼容 Vue Leaflet (vue2-leaflet) package.josn安装版本 直接添加四个依赖 {// ..."scripts": {// ...},"depen…

OpenCV 开发 -- 图像阈值处理

文章目录[toc]1 基本概念2 简单阈值处理cv2.threshold3 自适应阈值处理cv2.adaptiveThreshold更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;OpenCV开发 &#x1f448;1 基本概念 图像阈值处理&#xff08;Thresholding&#xff09;是图像处理中的一种基本技术…

单串口服务器-工业级串口联网解决方案

在工业自动化、智能电网、环境监测等领域&#xff0c;传统串口设备&#xff08;如PLC、传感器、仪表等&#xff09;的网络化升级需求日益增长。博为智能单串口服务器凭借高性能硬件架构、多协议支持和工业级可靠性&#xff0c;为RS485设备提供稳定、高效的TCP/IP网络接入能力&a…

第 9 篇:深入浅出学 Java 语言(JDK8 版)—— 吃透泛型机制,筑牢 Java 类型安全防线

简介&#xff1a;聚焦 Java 泛型这一“类型安全保障”核心技术&#xff0c;从泛型解决的核心痛点&#xff08;非泛型代码的运行时类型错误、强制类型转换冗余&#xff09;切入&#xff0c;详解泛型的本质&#xff08;参数化类型&#xff09;、核心用法&#xff08;泛型类/接口/…

MySQL和Redis的数据一致性问题与业界常见解法

一、为什么会出现数据不一致&#xff1f; 根本原因在于&#xff1a;这是一个涉及两个独立存储系统的数据更新操作&#xff0c;它无法被包装成一个原子操作&#xff08;分布式事务&#xff09;。更新数据库和更新缓存是两个独立的步骤&#xff0c;无论在代码中如何排列这两个步骤…

coolshell文章阅读摘抄

coolshell文章阅读摘抄打好基础学好英语限制你的不是其它人&#xff0c;也不是环境&#xff0c;而是自己Java打好基础 程序语言&#xff1a;语言的原理&#xff0c;类库的实现&#xff0c;编程技术&#xff08;并发、异步等&#xff09;&#xff0c;编程范式&#xff0c;设计模…

数据库造神计划第六天---增删改查(CRUD)(2)

&#x1f525;个人主页&#xff1a;寻星探路 &#x1f3ac;作者简介&#xff1a;Java研发方向学习者 &#x1f4d6;个人专栏&#xff1a;《从青铜到王者&#xff0c;就差这讲数据结构&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此简单&a…

使用Rust实现服务配置/注册中心

Conreg 使用 Rust 实现的配置与注册中心&#xff0c;参考了 Nacos 的设计&#xff0c;简单易用&#xff0c;使用 Raft 保证集群节点数据一致性。 支持的平台&#xff1a; UbuntuCentOS其他常见的 Linux 发行版&#xff08;我们使用 musl 编译&#xff0c;理论上支持所有主流…

三色标记算法

在 JVM 并发垃圾收集&#xff08;GC&#xff09;中&#xff0c;三色标记算法是实现 “GC 线程与用户线程并行执行” 的关键技术&#xff0c;它解决了并发场景下 “如何准确标记存活对象” 的核心问题&#xff0c;是 CMS、G1 等现代收集器的底层基础。一、三色标记的核心&#x…

OpenStack 管理与基础操作学习笔记(一):角色、用户及项目管理实践

OpenStack实验 OpenStack命令 admin-openrc.sh 进入管理员视图查看当前 OpenStack 中的项目列表&#xff0c;验证是否已经登录成功切换用户 修改文件切换用户上传文件切换用户OpenStack 认证管理 实验介绍 通过 OpenStack Dashboard 和 OpenStack CLI 两种方式创建角色、用户、…