运用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(); } };
Original: https://www.cnblogs.com/LonelyMoNan/p/16732375.html
Author: lemon-Breeze
Title: 逆波兰表达式
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607305/
转载文章受原作者版权保护。转载请注明原作者出处!