news 2026/4/21 11:13:33

Java 转 C++ 系列:STL容器之stack与queue

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 转 C++ 系列:STL容器之stack与queue

文章参考:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难


文章目录

  • 一、stack容器
    • 1.1 stack 基本概念
    • 1.2 stack 常用接口
  • 二、queue容器
    • 2.1 queue 基本概念
    • 2.2 queue 常用接口

一、stack容器

1.1 stack 基本概念

stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。

栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为

  • 栈中进入数据称为 —入栈push
  • 栈中弹出数据称为 —出栈pop


另外,使用 vector 要求添加头文件#include<stack>


1.2 stack 常用接口

// 构造函数stack<T>stk;,stack采用模板类实现, stack对象的默认构造形式stack(conststack&stk);,拷贝构造函数// 赋值操作stack&operator=(conststack&stk);,重载等号操作符// 数据存取push(elem);,向栈顶添加元素pop();,从栈顶移除第一个元素top();,返回栈顶元素// 大小操作empty();,判断堆栈是否为空size();,返回栈的大小

示例代码:

#include<string>#include<iostream>#include<stack>usingnamespacestd;intmain(){system("chcp 65001> nul");// 1. 默认构造stack<int>stk;// 2. 数据存取:push添加栈顶元素stk.push(10);stk.push(20);stk.push(30);// 栈内:30(栈顶)→ 20 → 10(栈底)// 3. 大小操作:empty()/size()cout<<"栈是否为空:"<<boolalpha<<stk.empty()<<endl;// 输出:falsecout<<"栈的大小:"<<stk.size()<<endl;// 输出:3// 4. 数据存取:top()获取栈顶元素cout<<"栈顶元素:"<<stk.top()<<endl;// 输出:30stk.top()=300;// 修改栈顶元素 → 栈内:300 → 20 → 10// 5. 数据存取:pop()删除栈顶元素(无返回值)stk.pop();// 删除300 → 栈内:20 → 10cout<<"pop后栈顶元素:"<<stk.top()<<endl;// 输出:20// 6. 拷贝构造 & 赋值操作stack<int>stk2(stk);// 拷贝构造 → stk2: 20 → 10stack<int>stk3;stk3=stk2;// 重载等号 → stk3: 20 → 10// 循环清空栈(先判断非空)while(!stk.empty()){cout<<"删除栈顶:"<<stk.top()<<endl;// 依次输出20、10stk.pop();}cout<<"清空后栈大小:"<<stk.size()<<endl;// 输出:0return0;}

注:boolalpha 是 C++ 标准库中的输出格式控制符,作用是让 cout 输出布尔值(bool 类型)时,显示文本形式(true/false)而非默认的数字形式(1/0)


二、queue容器

2.1 queue 基本概念

Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。

队列容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。

  • 队列中进数据称为 —入队push
  • 队列中出数据称为 —出队pop


另外,使用 vector 要求添加头文件#include<queue>


2.2 queue 常用接口

// 构造函数queue<T>que;,queue采用模板类实现,queue对象的默认构造形式queue(constqueue&que);,拷贝构造函数// 赋值操作queue&operator=(constqueue&que);,重载等号操作符// 数据存取push(elem);,往队尾添加元素pop();,从队头移除第一个元素back();,返回最后一个元素front();,返回第一个元素// 大小操作empty();,判断队列是否为空size();,返回队列的大小

示例代码:

#include<queue>#include<iostream>usingnamespacestd;intmain(){system("chcp 65001> nul");// 1. 默认构造queue<int>que;// 2. 数据存取:push往队尾添加元素que.push(10);que.push(20);que.push(30);// 队列:10(队头)→ 20 → 30(队尾)// 3. 大小操作:empty()/size()cout<<boolalpha;// 布尔值显示true/falsecout<<"队列是否为空:"<<que.empty()<<endl;// 输出:falsecout<<"队列大小:"<<que.size()<<endl;// 输出:3// 4. 数据存取:front()队头 / back()队尾cout<<"队头元素:"<<que.front()<<endl;// 输出:10cout<<"队尾元素:"<<que.back()<<endl;// 输出:30que.back()=300;// 修改队尾元素 → 队列:10→20→300// 5. 数据存取:pop()删除队头(无返回值)que.pop();// 删除10 → 队列:20→300cout<<"pop后队头:"<<que.front()<<endl;// 输出:20// 6. 拷贝构造 & 赋值操作queue<int>que2(que);// 拷贝构造 → que2:20→300queue<int>que3;que3=que2;// 重载等号 → que3:20→300// 循环清空队列(先判断非空)while(!que.empty()){cout<<"删除队头:"<<que.front()<<endl;// 依次输出20、300que.pop();}cout<<"清空后队列大小:"<<que.size()<<endl;// 输出:0return0;}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 11:12:09

喜大普奔!终于有人把 IntelliJ IDEA 的 Git 集成工具独立出来开源了

&#x1f449; 这是一个或许对你有用的社群&#x1f431; 一对一交流/面试小册/简历优化/求职解惑&#xff0c;欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料&#xff1a; 《项目实战&#xff08;视频&#xff09;》&#xff1a;从书中学&#xff0c;往事上…

作者头像 李华
网站建设 2026/4/21 11:10:57

Windows平台EtherCAT主站进阶:从软实时到硬实时的Acontis方案剖析

1. Windows平台EtherCAT主站的挑战与机遇 在工业自动化领域&#xff0c;EtherCAT凭借其高速、高效的特性已经成为主流工业以太网协议之一。但当我们把目光投向Windows平台时&#xff0c;事情就变得有趣起来。作为一个非实时操作系统&#xff0c;Windows在工业控制领域一直面临着…

作者头像 李华
网站建设 2026/4/21 11:08:04

Element UI导航栏折叠时,如何优雅解决图标和文字错位问题?

Element UI导航栏折叠时的UI优化实战指南 最近在重构后台管理系统时&#xff0c;发现Element UI的导航栏折叠功能虽然开箱即用&#xff0c;但在实际项目中总会遇到各种UI细节问题。特别是当导航栏处于折叠状态时&#xff0c;图标错位、文字溢出、动画生硬等问题频频出现&#x…

作者头像 李华
网站建设 2026/4/21 11:06:49

别再手动算时间了!FFmpeg一行命令精准剪切视频片段(支持H.264/265)

FFmpeg视频剪辑高手课&#xff1a;精准时间控制与编码优化全攻略 每次剪辑视频时反复拖动时间轴预览的日子该结束了。作为全球最强大的多媒体处理工具&#xff0c;FFmpeg能通过命令行实现像素级精确的视频片段提取&#xff0c;但90%的用户都没发挥其真正实力——要么被时间戳误…

作者头像 李华