在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;