C++中stack
时间: 2024-02-10 20:10:41 浏览: 79
在C++中,`stack`是标准模板库(STL)中的一个容器,它基于LIFO(后进先出)的原则,即最后一个进入的元素会最先被弹出。`stack`可以用来实现一些基于栈的算法,如括号匹配、逆波兰表达式求值等。
`stack`容器提供了以下几个常用的成员函数和操作:
- `push()`:将元素压入栈顶。
- `pop()`:弹出栈顶元素。
- `top()`:返回栈顶元素。
- `empty()`:判断栈是否为空。
- `size()`:返回栈中元素的个数。
以下是一个使用`stack`容器的简单示例,用于计算逆波兰表达式的值:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int evalRPN(vector<string>& tokens) {
stack<int> s;
int num1, num2;
for (string token : tokens) {
if (token == "+") {
num1 = s.top();
s.pop();
num2 = s.top();
s.pop();
s.push(num2 + num1);
} else if (token == "-") {
num1 = s.top();
s.pop();
num2 = s.top();
s.pop();
s.push(num2 - num1);
} else if (token == "*") {
num1 = s.top();
s.pop();
num2 = s.top();
s.pop();
s.push(num2 * num1);
} else if (token == "/") {
num1 = s.top();
s.pop();
num2 = s.top();
s.pop();
s.push(num2 / num1);
} else {
s.push(stoi(token));
}
}
return s.top();
}
int main() {
vector<string> tokens = {"2", "1", "+", "3", "*"};
int result = evalRPN(tokens);
cout << "The result is: " << result << endl;
return 0;
}
```
输出结果为:
```
The result is: 9
```
这里使用了`stack`容器来存储逆波兰表达式中的数字和运算符,当遇到数字时,将其转换为整数并压入栈中;当遇到运算符时,弹出栈顶的两个元素进行计算,将结果压入栈中。最后栈中只剩下一个元素,即为逆波兰表达式的值。
阅读全文