前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >find_if算法

find_if算法

作者头像
大忽悠爱学习
发布2021-03-02 14:39:44
3330
发布2021-03-02 14:39:44
举报
文章被收录于专栏:c++与qt学习

功能: 按条件查找元素

函数原型:

在这里插入图片描述
在这里插入图片描述

find_if与find的区别:

  1. find是查找某个元素是否存在
  2. find_if是按条件查找,可以查找符合条件的元素有哪些

内置数据类型查找

代码语言:javascript
复制
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>
//find_if算法:按条件查找
//1.内置数据类型
//(1)普通函数
bool a(int val)
{
	if (val % 2 == 0)
	{
		return true;
	}
	return false;
}
//(2)仿函数
class a1 {
public:
	bool operator()(int val)
	{
		return val % 2 == 0;
	}
};
void test02()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	//查找能被2整除的数字,并打印输出
	vector<int>::iterator it;
	//一个调用函数,一个调用匿名函数对象
	//it=find_if(v.begin(), v.end(), a);
	it=find_if(v.begin(), v.end(), a1());
	while (it != v.end())
	{
		cout << *it << endl;
		//it+1这里是一个迭代器,如果写成后置加加,当前迭代器的当前值不会发生改变,传给it的还是原来的迭代器,所有打印会一直重复打印当前值
		//find_if第一个参数填的迭代器无论前置还是后置++,都不会对it的值产生改变,因为里面填入的只是一个迭代器,++只会改变迭代器的位置
		it = find_if(it+1, v.end(), a1());
		//++it,不能用it++
	}
}
int main()
{
	test02();
	system("pause");
	return 0;
}
在这里插入图片描述
在这里插入图片描述

自定义数据类型:

代码语言:javascript
复制
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
#include<string>
//find_if算法:按条件查找
//2.自定义数据类型
class per {
public:
	int age;
	string name;
	per(string name, int age)
	{
		this->name = name;
		this->age = age;
	}
};
//(1)普通函数
bool  a(const per &a)
{
	return a.age > 60;
}
//(2)仿函数
class b {
public:
	bool operator()( per &p)
	{
		return p.age > 60;
	}
};
void test01()
{
	vector<per> v;
	per p("孙悟空", 100);
	per p1("猪八戒", 80);
	per p2("沙僧", 50);
	v.push_back(p);
	v.push_back(p1);
	v.push_back(p2);
	vector<per>::iterator it;
	it = find_if(v.begin(), v.end(), b());
	//查找
	while (it!=v.end())
	{
		cout << "姓名:  " << (*it).name << "   年龄: " << (*it).age << endl;
		it = find_if(++it, v.end(), b());
	}
}
int main()
{
	test01();
	system("pause");
	return 0;
}
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档