非变异算法之查询( find(), find_if(), find_first_of, adjacent_find(), find_end(), search(), search_n() )

来源:互联网 发布:汉口招聘淘宝客服 编辑:程序博客网 时间:2024/05/02 20:44

主要函数

 

           查询操作是最广的操作,STL主要提供了一下查询函数。

  • find():在迭代器中序列中找出某个值第一次出现的位置。
  • find_if():在单迭代器序列中找出符合谓词的第一个元素。
  • find_first_of():在双迭代器中找出一子序列中某元素第一次出现的位置。
  • adjacent_find():在单迭代器中找出第一次相邻值相等的元素的位置。
  • find_end():在双迭代器序列中找出一子序列最后一次出现的位置。
  • search():在双迭代器序列中找出一子序列第一次出现的位置。
  • search_n():在单迭代器序列中找出一个值连续n次出现的位置。

      各个函数原型如下所示:

     

       1) find

         

           原型:

           template <class InIt, class T>

           InIt find(InIt first, InIt last, const T & val)

       

           参数说明:

  •  InIt:输入迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
  • T:模板类型参数

       该函数是查询[first, last)间迭代器对应的元素值是否有等于val的,若有则返回器迭代器指针;若无则返回last。可知查询的个数范围是N属于[0, last - first),由于要判定*(first+N) == val,因此模板T对应的类必须重载运算符“operate==”

 

       2) find_if

 

         原型:

         template<class InIt, class Pred>

         InIt find_if(InIt first, InIt last, Pred pr);

 

         参数说明:

  •  InIt:输入迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
  • Pred:普通全局函数或一元函数对象,返回值是bool类型。

       该函数是查询[first, last)间迭代器对应的元素*(first+i), 若pr(*(first + i))返回true,则返回此时的迭代器指针,表明满足条件的元素已经找到;若没有找到则返回last。

 

      3) find_first_of

      

         原型:

         templat<class FwdIt1, class FwdIt2>

         FwdIt1 find_first_of(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2);

 

         template<class FwdI1, class FwdIt2, class Pred>

         FwdIt1 find_first_of(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2, Pred pr);

 

         参数说明:

  • FwdIt1, FwdIt2:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
  • Pred:二元全局函数或函数对象。

         第一个原型含义是:若第一个前向迭代器[first1, last1)间第N个元素与第二个前向迭代器[first2, last2)间的某个元素相等,且N最小则返回first1+N。表明第一个前向迭代器FwdIt中有元素与第二个前向迭代器FwdIt2中的元素相等,否则返回last1.

         第二个原型与第一个相似,不知过要定义预判定函数pr(*(first1 + N), *(first2 + M))。

 

        4) adjacent_find()

 

          原型:

 

          template<class FwdIt>

          FwdIt adjacent_find(FwdIt first, FwdIt last);

 

          template<class FwdIt, class Pred>

          FwdIt adjacet_find(FwdIt first, FwdIt last, Pred pr);

 

         参数说明:

  • FwdIt:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
  • Pred:二元全局函数或函数对象。

         第一个原型含义是:若前向迭代器FwdIt中存在第N个元素,有*(first+N)==*(first +N +1),且N最小,则表明有两个相邻元素是相等的,返回(first+N),否则返回last。

         第二个原型与第一个相似,只不过要定义与判定函数pr(*(first+N), *(first + N + 1)).

 

        5) find_end

 

           原型:

 

           template<class FwdIt1, class FwdIt2>

           FwdIt find_end(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2);

 

           template<class FwdIt1, class FwdIt2, class Pred>

           FwdIt1 find_end(FwdIt1 first1, FwdIt last1, FwdIt2 first2, FwdIt2 last2, Pred pr);

 

           参数说明:

  • FwdIt1, FwdIt2:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
  • Pred:二元全局函数或函数对象。

       第一个原型含义是:若前向迭代器FwdIt1从地N个元素开始:*(first1 + N) == * (first2+0), *(first1 +N+1) == *(first2 + 1)

,... , *[first1+(last2-first2 - 1) == *[first2+(last2-first2 -1), 且N最大,则返回(first1+N),否则返回last1。即返回在FwdIt元素中最后一次完全与FwdIt序列元素匹配的开始位置。

        第二个原型与第一个相似,只不过要定义预判断函数pr(*(first1+N+M), *(first2+N+M).

 

       6)search()

 

         原型:

         template<class FwdIt1, class FwdIt2>

         FwdIt search(FwdIt first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2);

         template<class FwdIt1, class FwdIt2, class Pred>

         FwdIt1 search(FwdIt1 first1, FwdIt1 last1, FwdIt2 first2, FwdIt2 last2, Pred pr);

 

         参数说明:

  • FwdIt1, FwdIt2:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
  • Pred:二元全局函数或函数对象。

         第一个原型含义是:若前向迭代器FwdIt1从地N个元素开始:*(first1 + N) == * (first2+0), *(first1 +N+1) == *(first2 + 1)

,... , *[first1+(last2-first2 - 1) == *[first2+(last2-first2 -1), 且N最大,则返回(first1+N),否则返回last1。即返回在FwdIt元素中首次完全与FwdIt序列元素匹配的开始位置。

        第二个原型与第一个相似,只不过要定义预判断函数pr(*(first1+N+M), *(first2+M).

 

        7)search_n

       

         原型:

         template<class FwdIt, class Dist, class T>

         FwdIt search_n(FwdIt first, FwdIt last, Dist n, const T & val);

         template<class FwdIt, class Dist , class T, class Pred>

         FwdIt search_n(FwdIt first, FwdIt last, Dist n, const T& val, Pred pr);

 

         参数说明:

  • FwdIt:前向迭代器,first表示起始元素的迭代器指针,last表示结束元素的迭代器指针。
  • n:整型变量,表示大小。
  • val:待比较的值。
  • Pred:二元全局函数或函数对象。

         第一个原型含义是:在前向迭代器FwdIt中,从第N个元素开始连续的n个元素满足:*(first + N) == val, *(first+1) == val, ..., *(first +N +n) = val,且n最小,则返回*(first+N),否则返回last。

 

         第二个函数原型与第一个相似,只不过要定义预判定函数pr(*(first + N + M), val)

 

 

student表,查询

 

find_serial_string例子:

 

 

 

       

 

 

 

 

原创粉丝点击