C++学习笔记24——泛型算法之find

原创 2015年11月21日 13:41:25

1,泛型算法概述

(1)泛型是指这组算法可以操作在多种容器类型上,包括内置数组类型、甚至其他类型的序列(比如哪些??)
(2)泛型算法本身从不执行(调用)容器操作
(3)泛型算法从不直接添加或删除元素
(4)大多数情况下,每个算法都需要至少使用两个迭代器来标示该算法操纵的元素范围:[first, last)
(5)头文件:
#include <algorithm>
#include <numeric>



2,谓词(predicate)

The Predicate concept describes a function object that takes a single iterator argument that is dereferenced and used to return a value testable as a bool.
牵涉到function object的概念,暂时就理解成是接收单个迭代器,返回bool值的函数吧。
C语言里的sort函数已经有类似的用法,不过它是用函数指针来实现的。

3,find函数

template< class InputIt, class T >
InputIt find(InputIt first, InputIt last, const T& value );	     //(1)
	
template< class InputIt, class UnaryPredicate >
InputIt find_if( InputIt first, InputIt last, UnaryPredicate p );    //(2)
	
template< class InputIt, class UnaryPredicate >
InputIt find_if_not(InputIt first, InputIt last, UnaryPredicate q );  //(3)(since C++11)

三种find都返回 [first, last)间,满足特定条件的第一个元素的迭代器

1) find               查找值等于value的成员
2) find_if         查找让谓词p返回true的成员
3) find_if_not 查找让谓词p返回false的成员,从c++ 11开始引入
      注意:谓词p和q的函数原型应当满足如下形式:
        bool pred(const Type &a);
如果输入给find()的是方向迭代器,则其返回的也是反向迭代器。
            

      4,find_first_of函数

         

t   
</pre></h1></div><div class="t-li1" style="text-indent:-5em; padding:0.2em 0px 0.2em 3em; font-family:DejaVuSans,'DejaVu Sans',arial,sans-serif; font-size:12.8px; line-height:15.36px"><span style="font-size:12.8px; line-height:15.36px">z      </span><pre name="code" class="cpp">template< class ForwardIt1, class ForwardIt2 >
ForwardIt1 find_first_of( ForwardIt1 first, ForwardIt1 last,
                          ForwardIt2 s_first, ForwardIt2 s_last );  // 1(until C++11)
template< class InputIt, class ForwardIt >
InputIt find_first_of( InputIt first, InputIt last,
                       ForwardIt s_first, ForwardIt s_last );       // 2 (since C++11)

template< class ForwardIt1, class ForwardIt2, class BinaryPredicate >
ForwardIt1 find_first_of( ForwardIt1 first, ForwardIt1 last,
                           ForwardIt2 s_first, ForwardIt2 s_last, BinaryPredicate p;	// 3 (until C++11)
                   
template< class InputIt, class ForwardIt, class BinaryPredicate >
InputIt find_first_of( InputIt first, InputIt last,
                       ForwardIt s_first, ForwardIt s_last, BinaryPredicate p );	// 4 (since C++11)

在第一段范围[first,last)内查找与第二段范围[s_first,s_last)中任意元素匹配的元素,然后返回一个迭代器,指向第一个匹配的元素。找不到则返回last迭代器。
        第一种,不使用谓词的版本,直接使用“==”操作符去匹配,第二个版本则根据谓词匹配。
       谓词p的声明应满足如下形式: bool pred(const Type1 &a, const Type2 &b);
    注意:在C++ 11之前,两组迭代器的类型必须相同,c++ 11之后两组迭代器的类型可以不同。
 

版权声明:本文为博主原创文章,未经博主允许不得转载。

泛型算法find和find_if以及sort

一般的查找方法是写个函数遍历这个vector,一个个进行比较查找。 实际上在使用STL的时候,不建议使用循环遍历的查找方法,建议使用stl的泛型算法。理由如下:(参考《effictive c++》46...
  • jiayichendddd
  • jiayichendddd
  • 2015年01月08日 22:39
  • 1390

C++泛型算法中常用函数

C++泛型算法中的一些函数,find,copy,accumulate,fill,sort,unique的基本用法
  • tengfei461807914
  • tengfei461807914
  • 2016年08月26日 14:40
  • 368

C++学习笔记--泛型算法

标准库给容器定义了一些基本的操作,还定义了一组泛型算法,称它们为算法,是因为它们实现了一些经典算法的公共接口,如排序和搜索,称它们是泛型的,是因为它们可以用于不同类型的元素和多种容器类型,甚至包括内置...
  • du_qi
  • du_qi
  • 2016年08月15日 11:49
  • 476

C++学习之标准库泛型算法_STL算法

参见http://www.cplusplus.com/reference/std/ 标准库中的算法主要在algorithm、numeric两个头文件,注意有些是只能在C++11下使用,比如all_o...
  • xhu_eternalcc
  • xhu_eternalcc
  • 2014年03月22日 21:00
  • 1978

一些C++ STL泛型算法整理

泛型算法本身不会执行容器的的操作,他们只会运行于迭代器上,执行迭代器的操作。所以算法永远不会改变底层容器的大小,但可能改变容器中元素的值,也可能在容器中移动元素,但永远不会直接添加和删除元素。但标准库...
  • yibo_ge
  • yibo_ge
  • 2016年04月04日 22:04
  • 343

find泛型算法

学习stl有段时间了,总想写点什么,做点笔记,然后就开始纠结了是先写allocator, vector还是别的,最终决定柿子先挑软的捏,从算法开始吧,此为我的第一作,呵呵. 一个比较简单的find算...
  • yafeng_jiang
  • yafeng_jiang
  • 2011年11月17日 14:56
  • 2085

C++ 常用泛型算法的使用

#include #include #include #include #include #include using namespace std;//template void printi...
  • yvhqbat
  • yvhqbat
  • 2016年07月17日 17:32
  • 214

C++ 泛型算法简介

主要一些常见应用于容器的函数。这些算法一般位于头文件algorithm和头文件numeric中...
  • zhangxiao93
  • zhangxiao93
  • 2016年02月28日 22:13
  • 1056

c++泛型算法使用(一)

 1.copy的使用copy描述很简单:copy( InputIterator first1, InputIterator last,OutputIterator first2 );但是用起来很灵活:...
  • wuzhifeng1211
  • wuzhifeng1211
  • 2007年05月25日 20:51
  • 483

关于C++标准库泛型算法reverse的学习笔记

C++ Primer中这样描述reverse 反向排列元素一个容器为 9,8,7,6,5,4,3,2,1,0,sort后为0,1,2,3,4,5,6,7,8,9。一个容器为0,1,2,3,4,5,6,...
  • vagrxie
  • vagrxie
  • 2007年04月23日 11:35
  • 2941
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习笔记24——泛型算法之find
举报原因:
原因补充:

(最多只允许输入30个字)