find_if算法

2021-03-02 14:39:44 浏览数 (1)

功能: 按条件查找元素

函数原型:

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;
}

0 人点赞