//STL栈
#include<bits/stdc++.h>
using namespace std;
int main()
{
stack<int>arr;
for(int i=0;i<10;i++)
{
arr.push(i);
}
// for(int i=0;i<10;i++)
// {
// cout<<arr.top()<<endl;
// arr.pop();
// }
while(!arr.empty())
{
cout<<arr.top()<<endl;
arr.pop();
}
return 0;
}
数据结构栈的C++ STL实现
在计算机科学中,栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构。它支持两个主要操作:入栈(push)和出栈(pop)。入栈将元素添加到栈顶,出栈移除栈顶元素。C++标准模板库(STL)提供了一个高效的stack
容器适配器,简化了栈的实现和使用。下面我将一步步解释如何在C++中使用STL的栈。
1. 栈的基本概念
- 栈的核心操作包括:
push()
: 将元素添加到栈顶,时间复杂度为O(1)。pop()
: 移除栈顶元素,时间复杂度为O(1)。top()
: 访问栈顶元素但不移除,时间复杂度为O(1)。empty()
: 检查栈是否为空,时间复杂度为O(1)。size()
: 返回栈中元素的数量,时间复杂度为O(1)。
- STL的
stack
是基于其他容器(如deque
或list
)实现的适配器,默认使用deque
作为底层容器。
2. 使用STL栈的步骤
-
包含头文件 :首先需要包含
<stack>
头文件。cpp#include <stack>
-
声明栈对象 :使用模板语法声明栈,指定元素类型。例如,创建一个整数栈:
cppstd::stack<int> myStack;
-
常用操作示例 :
push()
: 添加元素到栈顶。pop()
: 移除栈顶元素(注意:调用前需检查栈是否为空)。top()
: 获取栈顶元素值。empty()
: 返回布尔值表示栈是否为空。size()
: 返回元素个数。
3. 完整代码示例
以下是一个简单的C++程序,演示栈的基本操作:创建栈、入栈、出栈和遍历。
cpp
#include <iostream>
#include <stack> // 包含栈头文件
int main() {
// 声明一个整数栈
std::stack<int> stack;
// 入栈操作:添加元素
stack.push(10);
stack.push(20);
stack.push(30);
// 输出栈顶元素
std::cout << "栈顶元素: " << stack.top() << std::endl; // 输出30
// 出栈操作:移除栈顶元素
stack.pop(); // 移除30
std::cout << "移除后栈顶元素: " << stack.top() << std::endl; // 输出20
// 检查栈是否为空
if (!stack.empty()) {
std::cout << "栈非空,元素数量: " << stack.size() << std::endl; // 输出2
}
// 遍历栈(栈不支持直接迭代,需借助临时栈)
std::cout << "栈中元素(从顶到底): ";
while (!stack.empty()) {
std::cout << stack.top() << " ";
stack.pop(); // 边遍历边移除
}
std::cout << std::endl;
return 0;
}
4. 注意事项
-
底层容器 :默认使用
deque
,但可以指定其他容器,例如:cppstd::stack<int, std::list<int>> customStack; // 使用list作为底层容器
-
时间复杂度:所有核心操作(push, pop, top等)的平均时间复杂度为O(1),因为底层容器(如deque)支持高效访问。
-
安全性 :调用
pop()
或top()
前,务必检查栈是否为空,否则可能导致未定义行为。 -
应用场景:栈常用于函数调用栈、表达式求值(如括号匹配)、深度优先搜索(DFS)等算法。
通过STL的stack
,您可以高效地实现栈操作,避免手动管理内存。如果您有具体问题(如性能优化或特定应用),请提供更多细节!