【发布时间】:2011-10-07 10:51:25
【问题描述】:
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。然后解析命令并将适当的运算符及其参数组合到一个谓词中。
【问题讨论】:
-
Combining Predicates 的可能重复项
-
这里有很多关于参数的静态组合,但我的意思是谓词的动态组合,比如我可以选择我想要更大+更少+等于或更大_等于+更少或只有更少等。
-
如果我是你,我会用重载的加号运算符实现我自己的比较函数
-
请解释“动态组合”。在您的示例中,谓词在编译时已经知道。这与“动态”相反
-
您应该将此要求添加到问题中。这使它成为一个完全不同的问题。