Senior Dogsbody Engineer  

find_if  按条件查找元素

 

语法格式:

1
2
3
4
5
6
7
/*
   按值查找元素,找到返回指定位置迭代器,找不到返回结束迭代器位置
   begin 迭代器开始
   end   迭代器结束
   comparefunction 函数或者谓词(返回bool类型的仿函数)
*/
find_if(iterator begin, iterator end, comparefunction);

 

代码示例:

复制代码
//1.查找内置数据类型
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

class AboveFive
{
public:
       bool operator()(int val)
       {
              return val > 5;
       }
};

int main()
{
    vector<int> vec = {1,2,3,4,5,6,7,8,9,10};
    
    vector<int>::iterator iter = find_if(vec.begin(), vec.end(), AboveFive());
    if (iter != vec.end())
    {
           printf("result is %d\n",  *iter);
    }
    
     return 0;
}

// print out: the result is 6

//2.查找自定义数据类型
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;
class Person
{
public:
       Person(string name, int age)
       {
              this->name = name;
              this->age = age;
       }
       string name;
       int age;
};

class Above20
{
public:
       bool operator()(Person &p)
       {
              return p.age > 20;
       }
};

int main()
{
       Person p1("Jack", 10);
       Person p2("Rose", 20);
       Person p3("Peter", 30);
       Person p4("Kate", 40);
       
       vector<Person>vecPerson;
       vecPerson.push_back(p1);
       vecPerson.push_back(p2);
       vecPerson.push_back(p3);
       vecPerson.push_back(p4);

        vector<Person>::iterator iter= find_if(vecPerson.begin(), vecPerson.end(), Above20());
        if(iter != vecPerson.end())
        {
               printf("result is %s with age %d  \n", iter->name.c_str(), iter->age);
        }
       return 0;
}

// print out: result is Peter with age 30
    
 
复制代码

 

find 用于在指定范围内查找和目标元素值相等的第一个元素。

语法格式:

/*
  first和last为输入迭代器,[first, last) 用于指定该函数的查找范围;val 为要查找的目标元素。
  该函数会返回一个输入迭代器,当 find() 函数查找成功时,其指向的是在 [first, last) 区域内查找到的第一个目标元素;如果查找失败,则该迭代器的指向和 last 相同。

  find() 函数的底层实现,其实就是用==运算符将 val 和 [first, last) 区域内的元素逐个进行比对。这也就意味着,[first, last) 区域内的元素必须支持==运算符。
*/

find(iterator first, iterator last, const T&val);

代码示例:

复制代码
#include <iostream>  
#include <algorithm> 
#include <vector>      
#include <cstring>

using namespace std;

int main() {
    //find() 函数作用于普通数组
    char stl[] ="abcdefghijklmnopq";

    //调用 find() 查找第一个字符 'c'
    char * p = find(stl, stl + strlen(stl), 'g');

    //判断是否查找成功
    if (p != stl + strlen(stl)) {
        printf("result is %s\n", p);
    }
    
    //find() 函数作用于容器
    std::vector<int> myvector{ 10,20,30,40,50 };
    std::vector<int>::iterator it;
    it = find(myvector.begin(), myvector.end(), 30);
    if (it != myvector.end())
    {
    printf("result is %d\n", *it);
    }

    return 0;
}

print out:
result is ghijklmnopq
result is 30
复制代码

 

posted on   高级打杂工程师  阅读(224)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
 
点击右上角即可分享
微信分享提示