Stack 简介
- stack 是堆栈容器,是一种“先进后出”的容器。
- stack 是简单地装饰 deque 容器而成为另外的一种容器。
- #include
stack没有迭代器
Stack所有元素的进出都必须符合“先进后出”的条件,只有stack顶端的元素,才有机会被外界取用,stack不提供遍历功能,也不提供迭代器
stack 对象的默认构造
- stack 采用模板类实现, stack 对象的默认构造形式: stackstkT;
- stackstkInt; //一个存放 int 的 stack 容器。 stackstkFloat; //一个存放 float 的 stack 容器。
- stackstkString; //一个存放 string 的 stack 容器。
- …
- //尖括号内还可以设置指针类型或自定义类型。
stack 的 push()与 pop()方法
- stack.push(elem); //往栈头添加元素
- stack.pop(); //从栈头移除第一个元素
stack 对象的拷贝构造与赋值
- stack(conststack&stk); //拷贝构造函数
- stack&operator=(conststack&stk); //重载等号操作符
stack 的数据存取
- stack.top(); //返回最后一个压入栈元素
stack 的大小
-
stack.empty(); //判断堆栈是否为空
-
stack.size(); //返回堆栈的大小
void test01() { stack<int>s; //放入数据 push s.push(10); s.push(20); s.push(30); s.push(40); while (s.size()!=0) { cout << "栈顶为:" << s.top() << endl;//40先出 30 20 10 //弹出栈顶元素 s.pop(); } cout << "size= " << s.size() << endl; } int main() { test01(); system("pause"); return 0; }
逆波兰表达式求值
#include<iostream>
using namespace std;
#include<stack>
#include<vector>
#include<string>
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> s;
for (size_t i = 0; i < tokens.size(); ++i) {
string& str = tokens[i];
// str为数字
if (!("+" == str || "-" == str || "*" == str || "/" == str))
{
s.push(atoi(str.c_str()));
}
else
{
// str为操作符
int right = s.top();
s.pop();
int left = s.top();
s.pop();
switch (str[0])
{
case '+':
s.push(left + right);
break;
case '-':
s.push(left - right);
break;
case '*':
s.push(left * right);
break;
case '/':
// 题目说明了不存在除数为0的情况
s.push(left / right);
break;
}
}
}
return s.top();
}
};
int main()
{
Solution s;
vector<string> s1 = { "2", "1", "+", "3", "*" };
s.evalRPN(s1);
system("pause");
return 0;
}