STL容器-stack

已结束 ACM/ICPC 开始于: 2025-3-21 11:00 1564 小时 主持人: 44

一、什么是栈

1、什么是容器适配器

STL 中的容器适配器有 stack、queue、priority_queue 三种。它们都是在顺序容器的基础上实现的,屏蔽了顺序容器的一部分功能,突出或增加了另外一些功能。

 

容器适配器都有以下三个成员函数:

  • push ():添加一个元素。
  • top ():返回顶部(对 stack 而言)或队头(对 queue、priority_queue 而言)的元素的引用。
  • pop ():删除一个元素。

 

容器适配器是没有迭代器的,因此 STL 中的各种排序、查找、变序等算法都不适用于容器适配器。

2、什么是栈

 

栈是一种后进先出(First in last out,简称 FILO 或者 LIFO)的元素序列,访问和删除都只能对栈顶的元素(即最后一个被加入栈的元素)进行,并且元素也只能被添加到栈顶。栈内的元素不能访问。如果一定要访问栈内的元素,只能将其上方的元素全部从栈中删除,使之变成栈顶元素才可以。

 

stack 容器有广泛的应用。例如,编辑器中的 undo (撤销) 机制就是用堆栈来记录连续的变化。撤销操作可以取消最后一个操作,这也是发生在堆栈顶部的操作。




入栈顺序:10 20 30 40 50

出栈顺序:50 40 30 20 10

注意:栈的进出元素是可以同时进行

二、栈的常见函数

函数名

函数说明

push(元素)

入栈

pop()

出栈

top()

返回栈顶元素

size()

返回元素个数

empty()

判断栈是否为空

三、栈的应用

例子栈的存入与遍历

#include <bits/stdc++.h>
using namespace std;


int main() {
    // 定义一个整型栈s
    stack<int> s;
    // 以下是之前示例入栈、获取栈顶元素、出栈操作,这里被注释掉了
    // s.push(10);//入栈
    // s.push(20);
    // s.push(30);
    // cout<<s.top()<<endl;
    // s.pop(); //出栈
    // cout<<s.top()<<endl;


    /*
     向栈中存入元素,直到遇到-1结束
    */
    int x;
    while (1 == 1) {
        // 从标准输入读取一个整数
        cin >> x;
        // 如果读取到的数为 -1 则退出循环
        if (x == -1) break;
        // 将读取到的数压入栈中
        s.push(x);
    }


    // 将元素逐个访问(将元素逐个弹出)
    while (s.empty() == false) {
        // 获取栈顶元素并输出
        cout << s.top() << endl;
        // 弹出栈顶元素
        s.pop();
    }
    return 0;
}

</span>

状态
已结束
规则
ACM/ICPC
题目
5
开始于
2025-3-21 11:00
结束于
2025-5-25 15:00
持续时间
1564 小时
主持人
参赛人数
44