用do_if和assign_if函数来提高一贯性

ZDNet软件频道 时间:2003-02-26 作者:BUILDER.COM |  我要评论()
本文关键词:cpptips
标准模板库(STL)为你提供了许多算法,如:for_each、copy、transform以及许多其它算法。你可能已经注意到,许多算法还有名字上添加词缀‘_if’的对应算法,不幸的是,其它的一些算法没有与之对应的算法,这就显得有些不一致了。

标准模板库(STL)为你提供了许多算法,如:for_each、copy、transform以及许多其它算法。你可能已经注意到,许多算法还有名字上添加词缀‘_if’的对应算法,如counte_if、remove_copy_if、replace_copy_if。不幸的是,其它的一些算法没有与之对应的算法,这就显得有些不一致了。

我们将向你介绍一种解决这个问题的方法。这个方法对任何满足下列条件的算法都适用:

  • 仿函式(如for_each)
  • 输出叠代器(output iterator,例如copy、copy_n、merge、rotate_copy、set_difference)

当一个算法需要仿函式时,你就可以使用do_if,当do_if中的一元判断返回为“真”时,算法要求的仿函式即被调用。Assign_if的用法与之类似,只有当assign_if中的一元判断返回为“真”时,才把元素值赋给输出叠代器。你可以用assign_if来筛选输出序列。

上面两个函数的用法很简单:

  • do_if( Operation op,UnaryPredicate p):对元素e,当判断条件p(e)返回为真时执行操作op(e)。
  • assign_if(OutputIterator it, UnaryPredicate p):对元素e,当判断条件p(e) 返回为真时,赋值给它。

它们的用法很简单,例如:

下面是do_if和assign_if的代码和相应的例子:



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134