Stack

1. 标准库 std::stack (最常用)

头文件:#include <stack>

操作 代码 说明 注意
定义 stack<int> s; 定义一个整型栈
入栈 s.push(x); 放入元素 x
看顶 x = s.top(); 获取栈顶元素 不删除元素
出栈 s.pop(); 删除栈顶元素 返回 void (不返回值)
判空 s.empty() 空返回 true 常用于循环条件
大小 s.size() 返回元素个数

❌ 常见死法(Runtime Error):

  1. 合并调用int x = s.pop(); (错误! C++ pop 无返回值)。

标准遍历模板:

while (!s.empty()) {
    int top_val = s.top(); // 1. 先拿值
    s.pop();               // 2. 再扔掉
    // 处理 top_val...
}

2. 用 vector 模拟栈

std::stack 本质是容器适配器,常数稍大且不能遍历内部。竞赛中常用 vector 模拟,速度快且灵活。

栈操作 Vector 等价写法
push(x) v.push_back(x)
pop() v.pop_back()
top() v.back()
empty() v.empty()

优势: 可以用 v[i] 访问栈底或中间元素(标准 stack 做不到)。


3. 手写数组模拟栈 (最快,防 TLE)

如果不使用 STL,这是性能天花板。

const int N = 100010;
int stk[N];
int tt = 0; // tt 代表栈顶指针

// 入栈
stk[++tt] = x; 

// 出栈
tt--; 

// 取栈顶
int top_val = stk[tt];

// 判空
if (tt > 0) { ... }
posted @ 2025-12-12 22:47  Sunstreamy  阅读(1)  评论(0)    收藏  举报