功能: 按条件查找元素
函数原型:
find_if与find的区别:
- find是查找某个元素是否存在
- 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;
}