• STL学习之find系列函数


    这里先介绍find, find_if, find_first_of,三个函数。其余的以后再更新。

    一、std::find()

    用法:find(first, end, value);

    返回区间[first,end)中第一个值等于value的元素位置;若未找到,返回end。函数返回的是迭代器或指针,即位置信息。

    参考代码main(),查找findvalue的值

    二、std::find_if()

    用法:find_if(first, end, bool pred);

    返回区间[first,end)中使一元判断式pred为true的第一个元素位置;若未找到,返回end。

    参考代码main(),test_find_if();查找第一个被5整除的数,pred写成bool函数

    三、std::find_first_of()

    用法:find_first_of(first1, end1, first2, end2);

     返回第一个区间迭代器位置,满足第一个区间[first1,end1)中的元素第一次出现在第二个区间[first2,end2)中。

    通俗就是说顺序从第一个区间[first1,end1)中取一个元素,在第二个区间中找有没有相同的元素,如果有就返回第一个区间中元素位置;未找到则继续

    用第一个区间的下一个元素在第二个区间找。

    因此只要保证两个区间内的元素可以==即可,不用管装元素的容器形式。下面的例子我第一个区间用的vector、而第二个区间是list也是可以的。

    参考代码main(),test_find_first_of();查找vector中第一次出现在list的元素。

    代码示例:

     1 bool divbyfive(int x)
     2 {
     3     return x%5 ? 0 : 1;
     4 }
     5 
     6 void test_find_if(vector<int> vec)
     7 {
     8     vector<int>::iterator vec_it;
     9     vec_it=find_if(vec.begin(),vec.end(),divbyfive);
    10     if (vec_it!=vec.end())
    11     {
    12         cout<<"满足判断函数的数为: "<<*vec_it<<"位置在"<<vec_it-vec.begin()<<endl;
    13     } 
    14     else
    15     {cout<<"未找到满足判断函数的数"<<endl;
    16     }
    17     return;
    18 }
    19 
    20 void test_find_first_of(vector<int> vec)
    21 {
    22     list<int> list2;
    23     for (int i=20;i>5;i--)
    24     {
    25         list2.push_back(i);
    26     }
    27     vector<int>::iterator vec_it;
    28     vec_it=find_first_of(vec.begin(),vec.end(),list2.begin(),list2.end());
    29     if (vec_it!=vec.end())
    30     {
    31         cout<<"第一次出现在第二个容器的元素为: "<<*vec_it<<"位置在: "<<vec_it-vec.begin()<<endl;
    32     } 
    33     else
    34     {
    35         cout<<"两个容器没有相同元素"<<endl;
    36     }
    37 }
    38 
    39 int main()
    40 {
    41     vector<int> vec;
    42     int findvalue=11;
    43     for (int i=1;i<11;i++)
    44     {
    45         vec.push_back(i);
    46     }
    47     vector<int>::iterator vec_it;
    48     vec_it=find(vec.begin(),vec.end(),findvalue);
    49     if (vec_it!=vec.end())
    50     {
    51         cout<<findvalue<<" position is "<<distance(vec.begin(),vec_it)<<endl;
    52     }
    53     else
    54         cout<<findvalue<<"is not found"<<endl;
    55 
    56     test_find_if(vec);
    57     test_find_first_of(vec);
    58     return 0;
    59 }

    参考:http://www.cnblogs.com/heyonggang/p/3241789.html

  • 相关阅读:
    Unity实现Bezier曲线的移动(三点之间的Bezier曲线的移动)
    error CS2001: Source file `Assets/Pro Standard Assets/Image Based/SaveGameData.cs' could not be found 错误
    Some objects were not cleaned up when closing the scene. (Did you spawn new GameObjects from OnDestroy?) 错误
    Unity拖拽旋转2D物体
    Unity预编译
    Activity的四种launchMode
    接入华为海外SDK支付,按下home键,之后支付页面被销毁
    Android动态权限申请
    armeabi与armeabi-v7a的区别
    win7上帝模式
  • 原文地址:https://www.cnblogs.com/chenzhefan/p/5649429.html
Copyright © 2020-2023  润新知