根据参数对数字类型列表进行操作

Operations on Numeral Types' lists According to Arguments

我有一个函数,它接受一个操作数列表 (float, int..etc) 和另一个枚举列表 {ADD, SUBTRACT, DIVIDE, MULTIPLY} 作为参数。我想要函数做的是获取这些并形成它的表达式。

例如,假设我传递了操作数 list<int> {2, 5, 6, 2} 和枚举列表 {MULTIPLY, ADD, DIVIDE}。我希望该函数以某种方式生成并计算出此 maintaining the order of operations 的表达式。

在这种情况下,表达式将为 2*5+6/2,其计算结果为 13

正在做

Add(x,y) Subtract(x,y) Multiply(x,y) Divide(x,y)

函数将不起作用,因为它有时会破坏操作顺序。我不想自己编写优先级表,而且我知道 C++ 运算符确实已经设置了优先级。有什么方法可以利用它吗?

您可以使用 Shunting-Yard 算法将中缀表达式转换为反向波兰表示法的堆栈,然后执行堆栈外的操作。

所以我这样做的方法是使用 Tree data structure。乘法和除法运算及其左右操作数都放在树的较深节点中。然后我写了一个 Evaluate() 函数,它会从下到上遍历节点并对每个表达式求值。

我认为这比将表达式转换为逆波兰表示法然后按照 Lorehead 的建议在需要时执行它更快,所以如果我错了请纠正我。