标准模板库(STL)为你提供了许多算法,如:for_each、copy、transform以及许多其它算法。你可能已经注意到,许多算法还有名字上添加词缀‘_if’的对应算法,如counte_if、remove_copy_if、replace_copy_if。不幸的是,其它的一些算法没有与之对应的算法,这就显得有些不一致了。
我们将向你介绍一种解决这个问题的方法。这个方法对任何满足下列条件的算法都适用:
当一个算法需要仿函式时,你就可以使用do_if,当do_if中的一元判断返回为“真”时,算法要求的仿函式即被调用。Assign_if的用法与之类似,只有当assign_if中的一元判断返回为“真”时,才把元素值赋给输出叠代器。你可以用assign_if来筛选输出序列。
上面两个函数的用法很简单:
它们的用法很简单,例如:
下面是do_if和assign_if的代码和相应的例子: