逆波兰表达式
运用lambda表达式和包装器
class Solution { public: int evalRPN(vector<string>& tokens) { stack<long long> s; map<string,function<long long(long long,long long)>> func= {
//包装四种情况函数(lambda表达式) {"+",[](long long a,long long b){return a+b;}}, {"-",[](long long a,long long b){return a-b;}}, {"*",[](long long a,long long b){return a*b;}}, {"/",[](long long a,long long b){return a/b;}} }; for(auto& e:tokens) { if(func.count(e))//判断e是否存在map中 存在就是操作符 { long long right=s.top();//因为是栈 所以是先取到右 才能取到左 s.pop(); long long left=s.top(); s.pop(); s.push(func[e](left,right));//放入map里计算 } else//不存在就是操作数 { s.push(stoll(e));//操作数就放入栈内 } } return s.top(); } };