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

张开发
2026/4/21 11:13:38 15 分钟阅读

分享文章

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 要求添加头文件#includestack。1.2 stack 常用接口// 构造函数stackTstk;,stack采用模板类实现 stack对象的默认构造形式stack(conststackstk);,拷贝构造函数// 赋值操作stackoperator(conststackstk);,重载等号操作符// 数据存取push(elem);,向栈顶添加元素pop();,从栈顶移除第一个元素top();,返回栈顶元素// 大小操作empty();,判断堆栈是否为空size();,返回栈的大小示例代码#includestring#includeiostream#includestackusingnamespacestd;intmain(){system(chcp 65001 nul);// 1. 默认构造stackintstk;// 2. 数据存取push添加栈顶元素stk.push(10);stk.push(20);stk.push(30);// 栈内30栈顶→ 20 → 10栈底// 3. 大小操作empty()/size()cout栈是否为空boolalphastk.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 → 10coutpop后栈顶元素stk.top()endl;// 输出20// 6. 拷贝构造 赋值操作stackintstk2(stk);// 拷贝构造 → stk2: 20 → 10stackintstk3;stk3stk2;// 重载等号 → 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 要求添加头文件#includequeue。2.2 queue 常用接口// 构造函数queueTque;,queue采用模板类实现queue对象的默认构造形式queue(constqueueque);,拷贝构造函数// 赋值操作queueoperator(constqueueque);,重载等号操作符// 数据存取push(elem);,往队尾添加元素pop();,从队头移除第一个元素back();,返回最后一个元素front();,返回第一个元素// 大小操作empty();,判断队列是否为空size();,返回队列的大小示例代码#includequeue#includeiostreamusingnamespacestd;intmain(){system(chcp 65001 nul);// 1. 默认构造queueintque;// 2. 数据存取push往队尾添加元素que.push(10);que.push(20);que.push(30);// 队列10队头→ 20 → 30队尾// 3. 大小操作empty()/size()coutboolalpha;// 布尔值显示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→300coutpop后队头que.front()endl;// 输出20// 6. 拷贝构造 赋值操作queueintque2(que);// 拷贝构造 → que2:20→300queueintque3;que3que2;// 重载等号 → que3:20→300// 循环清空队列先判断非空while(!que.empty()){cout删除队头que.front()endl;// 依次输出20、300que.pop();}cout清空后队列大小que.size()endl;// 输出0return0;}

更多文章