STL 中有 less、equal_to、greater_equal 等运算符类。如何轻松地将它们结合使用,例如 remove_if 函数?
例如,我想删除 vector 中大于 0 且小于 3 且不等于 2 的元素,那么它会是这样的:
remove_if (v.begin(), v.end(), bind2nd(greater<int>(),0) + bind2nd(less<int>(),3) + not1(bind2nd(equal_to<int>(), 2)));
用户在程序运行期间可以指定过滤选项,例如他可以写:remove if x > 0 && x < 3 && x != 2,或者他可以写:remove if x > 5 || x == 3。然后解析命令,并将适当的运算符及其参数组合在一起成为一个谓词。
最佳答案
实际上,这在您的情况下相当简单。
您首先需要解析用户给出的语句,并将其转化为 AST(抽象语法树)。事实证明,这个 AST 几乎已经适合了。
x > 0 && x < 3 && x != 2
可以表示为一棵树:
AND
/ \
> AND
/ \ / \
x 0 < !=
/ \ / \
x 3 x 2
所有节点都应该继承自一个公共(public)基类,并且您应该实现一个Visitor
来评估给定值的x
参数。
关于c++ - 在运行时指定的多个谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7686245/