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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现