栈
std::stack
是 C++ STL 中的容器适配器,它提供了一个栈的数据结构,即后进先出(LIFO)的操作方式。栈的主要操作是插入元素到栈顶、移除栈顶元素,以及访问栈顶元素。它基于其他序列式容器(如 std::deque
或 std::vector
)实现。
1. 构造函数
默认构造函数:
std::stack<T>
:创建一个空的栈,T
是栈中元素的数据类型。
带容器的构造函数:
std::stack<T, Container>
:创建一个指定底层容器的栈,Container
是底层的具体容器类型,默认是std::deque<T>
。
2. 属性
类型定义
value_type
:栈中元素的类型。container_type
:底层容器的类型(默认为std::deque<T>
)。size_type
:栈中元素大小的类型(通常是std::size_t
)。reference
:返回元素的引用类型。const_reference
:返回常量元素的引用类型。
3. 成员方法
3.1 元素访问
top()
:功能:返回栈顶元素的引用,不移除元素。
复杂度:O(1)。
示例:
3.2 容量相关
empty()
:功能:检查栈是否为空,如果栈为空返回
true
,否则返回false
。复杂度:O(1)。
示例:
size()
:功能:返回栈中元素的数量。
复杂度:O(1)。
示例:
3.3 修改容器
push(const value_type& val)
:功能:将元素
val
压入栈顶。复杂度:O(1)。
示例:
emplace(Args&&... args)
:功能:原位构造元素,并将其压入栈顶,避免了额外的复制操作。
复杂度:O(1)。
示例:
pop()
:功能:移除栈顶元素。
复杂度:O(1)。
示例:
3.4 交换内容
swap(stack& other)
:功能:与另一个栈
other
交换元素。复杂度:O(1)。
示例:
4. 示例代码
5. std::stack
的底层容器
std::stack
的底层容器默认容器:
std::stack
默认使用std::deque
作为底层容器,但也可以使用std::vector
或std::list
。使用
std::vector
:使用
std::list
:
6. 应用场景
括号匹配:用于检查表达式中的括号是否配对。
函数调用栈:用于保存函数调用的返回地址,实现递归调用。
回溯算法:用于在回溯中保存路径信息。
深度优先搜索:DFS 算法中可以使用栈来模拟递归调用。
7. 总结
top()
返回栈顶元素的引用。
O(1)
push(const T& val)
将元素压入栈顶。
O(1)
emplace(Args&&... args)
原位构造新元素并压入栈顶。
O(1)
pop()
移除栈顶元素。
O(1)
empty()
检查栈是否为空。
O(1)
size()
返回栈中元素的数量。
O(1)
swap(stack& other)
交换两个栈的内容。
O(1)
std::stack
是一个简单的容器适配器,适用于需要后进先出(LIFO)操作的场景,比如括号匹配、递归处理、函数调用栈等。
Last updated