在 C++ 里,栈是一种遵循后进先出(LIFO)原则的数据结构。下面从多个方面为你介绍 C++ 栈:
1. 使用标准库中的std::stack
C++ 标准库提供了std::stack
容器适配器,能方便地实现栈的功能。以下是简单示例:
cpp
#include <iostream>
#include <stack>
int main() {
std::stack<int> myStack;
// 入栈操作
myStack.push(10);
myStack.push(20);
myStack.push(30);
// 访问栈顶元素
std::cout << "栈顶元素: " << myStack.top() << std::endl;
// 出栈操作
myStack.pop();
std::cout << "出栈后栈顶元素: " << myStack.top() << std::endl;
// 检查栈是否为空
if (!myStack.empty()) {
std::cout << "栈不为空,栈的大小: " << myStack.size() << std::endl;
}
return 0;
}
在这个示例中,首先创建了一个存储int
类型元素的栈myStack
。接着使用push
方法将元素压入栈,用top
方法访问栈顶元素,用pop
方法移除栈顶元素,用empty
方法检查栈是否为空,用size
方法获取栈中元素的数量。
2. 自定义栈的实现
你也可以自己实现一个栈。以下是一个简单的自定义栈的示例:
cpp
#include <iostream>
#include <vector>
template <typename T>
class MyStack {
private:
std::vector<T> elements;
public:
// 入栈操作
void push(const T& value) {
elements.push_back(value);
}
// 出栈操作
void pop() {
if (!elements.empty()) {
elements.pop_back();
}
}
// 访问栈顶元素
T top() const {
if (!elements.empty()) {
return elements.back();
}
throw std::out_of_range("Stack is empty");
}
// 检查栈是否为空
bool empty() const {
return elements.empty();
}
// 获取栈的大小
size_t size() const {
return elements.size();
}
};
int main() {
MyStack<int> myStack;
myStack.push(10);
myStack.push(20);
myStack.push(30);
std::cout << "栈顶元素: " << myStack.top() << std::endl;
myStack.pop();
std::cout << "出栈后栈顶元素: " << myStack.top() << std::endl;
if (!myStack.empty()) {
std::cout << "栈不为空,栈的大小: " << myStack.size() << std::endl;
}
return 0;
}
这个示例中定义了一个模板类MyStack
,借助std::vector
来存储栈中的元素,并且实现了push
、pop
、top
、empty
和size
等基本操作。
3. 栈的应用场景
栈在很多场景中都有应用,例如:
- 表达式求值:计算后缀表达式(逆波兰表达式)时会用到栈。
- 函数调用:程序在执行过程中,函数调用的上下文信息(如局部变量、返回地址等)会被压入栈中。
- 括号匹配:检查括号是否匹配时,可以使用栈来实现。