剖析std::find 您所在的位置:网站首页 std:find_if 剖析std::find

剖析std::find

2024-06-26 15:17| 来源: 网络整理| 查看: 265

最近的项目中标准库函数的使用比较频繁,很多博文都停留在套用层次,我是一个比较爱深究的人,闲暇之余查阅了很多文档。终于找到了满足我好奇心的解释。实际上像std::find_if()  std::for_each() 这样的函数就是简单的for循环,为了让我们少些代码而已。让我们一起揭开std::find_if() 神秘面纱。

它的定义大致这样的:  

template InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate p) { //迭代容器对结果进行判定操作 for (;first != last; ++first) { if (true == p(*first)) { return first; } } return last; }

最关键的是p它是一个可调用对象,用这个传入的委托可以处理判定逻辑,从而返回符合条件的第一个元素迭代器。就像MAP以struct做key要重载操作符一样。

二、既然p是可调用对象,那我们可以这样定义p: ///[method 1] bool fun1(int a) { if (a < 30) { return true; } else { return false; } } ///[method 2] struct Fun2 { public: bool operator()(int a) { if (a < 80) { return true; } else { return false; } } }; ///[method 3] 这种方式要求使用c++11,为了集中表达三种方式定义成了全局的,实际可做实参传入 auto fun3 = [] (int a) ->bool { if (a < 10) { return true; } else { return false; } }; 三、举个例子验证一把: int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QList l = {78, 87, 27, 90, 45, 6}; qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有