STL中有一些运算符类,如less、equal_to、greater_equal等。如何轻松地将它们组合起来与remove_if函数一起使用?
例如我想删除向量中大于 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 5 || x == 3。然后解析命令,并将适当的运算符及其参数组合在一起形成一个谓词。
实际上,对于您的情况来说,这相当简单。
首先需要解析用户给出的语句,并将其转化为AST(抽象语法树)。事实证明,这个 AST 几乎已经合适了。
x > 0 && x < 3 && x != 2
可以表示为一棵树:
AND
/ \
> AND
/ \ / \
x 0 < !=
/ \ / \
x 3 x 2
所有节点都应该继承自一个公共基类,并且您应该实现一个Visitor
来评估x
给定值的参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)