在 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. 栈的应用场景
栈在很多场景中都有应用,例如:
- 表达式求值:计算后缀表达式(逆波兰表达式)时会用到栈。
- 函数调用:程序在执行过程中,函数调用的上下文信息(如局部变量、返回地址等)会被压入栈中。
- 括号匹配:检查括号是否匹配时,可以使用栈来实现。