C++的find和find_if函数

  • Post author:
  • Post category:其他




一、find()

算法




  1. template


    <


    class


    InputIterator,


    class


    T>


  2. InputIterator find ( InputIterator first, InputIterator last,

    const


    T& value )


  3. {


  4. for


    ( ;first!=last; first++)


    if


    ( *first==value )


    break


    ;



  5. return


    first;


  6. }


返回区间[first,end)中第一个值等于value的元素的位置。


如果没有找到匹配元素,则返回end。


复杂度:线性复杂度。最多比较次数是:元素的总个数。


程序实例:


下面的程序在int类型的vector中搜寻元素5和12,如果搜索到,就返回其位置if欧泽输出提示信息。


main.cpp(头文件algostuff.h和上一篇博客中的相同):



  1. #include “algostuff.h”






  2. using




    namespace


    std;




  3. int


    main()


  4. {

  5. vector<

    int


    > intVec;



  6. INSERT_ELEMENTS(intVec,1,9);


  7. vector<

    int


    >::iterator pos;


  8. pos = find(intVec.begin(),intVec.end(),5);



  9. if


    (pos != intVec.end())


  10. cout <<

    “The value 5 exists,and its position is ”


    <<


  11. distance(intVec.begin(),pos) + 1 << endl;


  12. else




  13. cout <<

    “The value 4 not found!”


    << endl;



  14. pos = find(intVec.begin(),intVec.end(),12);



  15. if


    (pos != intVec.end())


  16. cout <<

    “The value 12 exists,and its position is ”


    <<


  17. distance(intVec.begin(),pos) + 1 << endl;


  18. else




  19. cout <<

    “The value 12 not found!”


    << endl;


  20. }


运行结果


(头文件


algostuff.h


和上一篇博客中的相同)










二、find_if()算法



  1. template


    <


    class


    InputIterator,


    class


    Predicate>


  2. InputIterator find_if ( InputIterator first, InputIterator last, Predicate pred )

  3. {


  4. for


    ( ; first!=last ; first++ )


    if


    ( pred(*first) )


    break


    ;



  5. return


    first;


  6. }


它在区间[first,end)中搜寻使一元判断式pred为true的第一个元素。

如果没找到,返回end。

程序实例:

下面程序找出第一个能够被3整除的元素,如果找到返回其位置。

main.cpp:



  1. #include “algostuff.h”






  2. using




    namespace


    std;




  3. int


    main()


  4. {

  5. vector<

    int


    > intVec;



  6. INSERT_ELEMENTS(intVec,1,9);


  7. vector<

    int


    >::iterator pos;


  8. pos = find_if(intVec.begin(),intVec.end(),

  9. not1(bind2nd(modulus<

    int


    >(),3)));




  10. if


    (pos != intVec.end())


  11. cout <<

    “The value divided by 3 exists,and the first value’s position is ”


    <<


  12. distance(intVec.begin(),pos) + 1 << endl;


  13. else




  14. cout <<

    “The value divided by 3 not found!”


    << endl;


  15. }


运行结果: