一、stack是什么

stack官方文档

栈就好比一摞盘子,最后放上去的盘子,一定是最先被拿走的,只能操作最顶部的元素,不能直接访问中间或底部的元素。

STL中的栈是一种容器适配器,不是新容器,是对现有数据结构的改造封装,变成新数据结构。

二、stack的特点

1.后进先出(LIFO):

最后入栈的数据,最先出栈。

2.受限访问:

只能访问 / 操作栈顶元素,不能遍历、不能随机访问。

三、stack的使用

3.1 stack的初始化

名称

使用示例

功能说明

stack()stack<int> s;定义一个空int栈

3.2 stack类对象的容量操作

名称

使用示例

功能说明

empty()stack.empty()判断是否为空
size()stack.size()获取长度

3.3 stack类对象的访问及遍历操作

因为栈结构的特殊性,我们只能访问栈顶元素

名称

使用示例

功能说明

top()stack.top();返回栈顶元素的引用

栈为空时调用会直接程序报错

3.4 stack类对象的修改操作

名称

使用示例

功能说明

push(val);s.push(val);

把元素val从栈顶压入栈,后进元素放在栈最上方。

pop();s.pop();删除栈顶元素

演示代码

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

int main()
{
    stack<int> s;        // 构造空栈
    s.push(20);
    s.push(26);
    cout << s.size();    // 输出2
    cout << s.top();     // 输出26
    s.pop();            //删除26
    cout << s.empty();   // 输出0(非空)
    return 0;
}

四、使用场景

C++ STL 中的 stack 是遵循后进先出规则的容器适配器,

底层默认依托 deque 实现,仅提供入栈、出栈、取栈顶、判空等简易接口,屏蔽多余操作保证逻辑严谨和操作简单。

常应用于函数递归调用栈、表达式括号匹配、字符串逆序、二叉树深度优先遍历、网页后退历史记录等场景

凡是需要后进入的数据先取出的业务逻辑,使用栈都能让代码简洁规范,逻辑清晰易懂。

更多推荐