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;//放入数据 pushs.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;
}