Stack 的介绍

Stack实现了一个后进先出的数据结构,与其他容器相比较,栈的元素是线性排列的,但只允许在一端(栈顶)进行添加和移除操作。同时只允许在一端(栈顶)进行添加和移除操作也是栈的他、重要特点。

Stack 的用法

Stack 头文件

Stack 位于C++的基础库<stack>中,在调用stack的相关函数前需要引用头文件<stack>。/

#include <stack>

Stack 的基本操作

  • push(): 在栈顶添加一个元素。
  • top(): 返回栈顶元素的引用,但不移除它。
  • pop(): 移除栈顶元素。
  • empty(): 检查栈是否为空。
  • size(): 返回栈中元素的数量。

Stack 的基础语法

0.创建Stack容器

//<void> stack<数据类型> 容器名
stack<int> a;

1.向Stack容器中添加元素

//<void> 容器名.push(欲添加数据)
a.push(1);

2.获取Stack容器中的顶端数据

//<定义的数据类型> 容器名.top()
a.top();

注意: stack 类型的容器只能访问最顶端的数据,即最后放入的数据,同时该操作并不会删除数据.

3.从Stack容器中删除数据

//<void> 容器名.pop()
a.pop();

注意: stack 类型的容器只支持删除栈最顶端的数据,即最后放入的数据.

4.检查栈是否为空

//<bool> 容器名.empty()
a.empty();

返回值: 若容器为空,则返回True;若容器不为空,则返回False.

5.获取栈中的元素个数

//<int> 容器名.size()
a.size();

代码示例

#include <iostream>
#include <stack>

int main() {
    std::stack<int> s;

    // 向栈中添加元素
    s.push(10);
    s.push(20);
    s.push(30);

    // 打印栈顶元素
    std::cout << "栈顶元素是: " << s.top() << std::endl; // 输出: 栈顶元素是: 30

    // 移除栈顶元素
    s.pop();
    std::cout << "删除元素后的栈顶元素是: " << s.top() << std::endl; // 输出: 删除元素后的栈顶元素是: 20

    // 检查栈是否为空
    if (!s.empty()) {
        std::cout << "栈不为空." << std::endl; // 输出: 栈不为空.
    }

    // 打印栈的大小
    std::cout << "栈中元素个数为: " << s.size() << std::endl; // 输出: 栈中元素个数为: 2

    // 继续移除元素
    s.pop();
    s.pop();

    // 检查栈是否为空
    if (s.empty()) {
        std::cout << "栈是空的." << std::endl; // 输出: 栈是空的.
    }

    return 0;
}

注意事项

  • <stack> 不提供直接访问栈中元素的方法,只能通过 top() 访问栈顶元素。
  • 尝试在空栈上调用 top()pop() 将导致未定义行为。
  • <stack> 的底层容器可以是任何支持随机访问迭代器的序列容器,如 vectordeque

参考文章:https://www.runoob.com/cplusplus/cpp-libs-stack.html