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之后两组迭代器的类型可以不同。
 

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

相关文章推荐

C++学习笔记26——泛型算法之容器元素排序(sort unique)

1,sort函数 template void sort( RandomIt first, RandomIt last ); template void sort( RandomIt first, ...

C++学习笔记(十六):对vector进行更多的操作——泛型算法

先强调一下,这里的泛型算法实际不光光是对vector的操作,对于“顺序容器”均可以。 但是什么是顺序容器: 我们都知道,容器就是一些特定类型对象的集合。而顺序容器为程序员提供了控制元素存储和访问的...
  • autocyz
  • autocyz
  • 2015年04月23日 14:45
  • 1398

C++学习笔记25——泛型算法之写入容器

1,fill函数 template void fill( ForwardIt first, ForwardIt last, const T& value ); 效果:将[first, last)范...

C++ Primer学习笔记——$11 泛型算法

题记:本系列学习笔记(C++ Primer学习笔记)主要目的是讨论一些容易被大家忽略或者容易形成错误认识的内容。只适合于有了一定的C++基础的读者(至少学完一本C++教程)。  作者: tyc611,...
  • whycold
  • whycold
  • 2011年01月19日 15:06
  • 517

《c++ primer》学习笔记——泛型算法01

头文件: #include #include 算法: 0、back_inserter template back_insert_iterator back_inserter...

《C++ Primer》第10章:泛型算法 学习笔记总结

概述 大多数算法定义在#include或者#include中。迭代器算法不能依赖于容器,泛型算法本身不会执行容器的操作,它们只会运行于迭代器之上,执行迭代器的操作,结果:算法永远不能改变底层容器的大小...

C++学习整理(泛型算法)

C++学习整理(泛型算法)

C++学习之泛型算法概述--摘自C++primer4

本文主要讨论C++标准库中的泛型算法(generic algorithm)。泛型算法是使用容器的强有力的辅助工具。    如果文中有错误或遗漏之处,敬请指出,谢谢!    标准库为...

【C++ Primer 学习笔记】: 容器和算法之【泛型算法】

本系列博客主要是在学习 C++ Primer 时的一些总结和笔记。 【C++ Primer 学习笔记】: 容器和算法之【泛型算法】 本文地址:http://blog.csdn.net/shanglia...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习笔记24——泛型算法之find
举报原因:
原因补充:

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