在C++中,std::stack 是一个标准模板库(STL)中的容器适配器,它提供了一种后进先出(LIFO, Last In First Out)的数据结构。std::stack 容器适配器基于底层容器(默认是 std::deque,但也可以由用户指定)进行封装,只暴露了栈的基本操作接口。
以下是一些常用的 std::stack 操作:
包含头文件
std::stack<int> s; // 创建一个int类型的栈
创建栈
std::stack<int> s; // 创建一个int类型的栈
基本操作
push(element): 在栈顶添加元素。pop(): 移除栈顶元素。top(): 返回栈顶元素,但不移除它。empty(): 如果栈为空,则返回true。size(): 返回栈中元素的数量。
示例
#include <iostream>
#include <stack> int main() { std::stack<int> s; // 向栈中添加元素 s.push(1); s.push(2); s.push(3); // 访问栈顶元素 std::cout << "栈顶元素: " << s.top() << std::endl; // 移除栈顶元素 s.pop(); // 检查栈是否为空 if (s.empty()) { std::cout << "栈为空" << std::endl; } else { std::cout << "栈不为空" << std::endl; } // 获取栈的大小 std::cout << "栈的大小: " << s.size() << std::endl; return 0;
}
自定义底层容器
虽然 std::stack 默认使用 std::deque 作为底层容器,但你也可以指定其他容器,例如 std::vector 或 std::list。这可以通过在 std::stack 的模板参数中指定来实现。但请注意,不是所有的容器都适合作为栈的底层容器,特别是那些不支持在容器中间快速插入或删除元素的容器。
例如,使用 std::vector 作为底层容器的栈:
std::stack<int, std::vector<int>> s;