#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
class great_20{
public:
bool operator()(int val){
return val>20;
}
};
bool greater_20(int val){
return val>20;
}
//一元谓词
void test01(){
vector<int> vec;
vec.push_back(10);
vec.push_back(50);
vec.push_back(20);
vec.push_back(80);
for_each(vec.begin(),vec.end(),[](int val){cout<<val<<" ";});
cout<<endl;
vector<int>::iterator ret;
ret=find_if(vec.begin(),vec.end(),greater_20);
//普通函数
if(ret==vec.end()){cout<<"未找到"<<endl;}else{cout<<"找到"<<*ret<<endl;}
//仿函数
vector<int>::iterator v_i=find_if(vec.begin(),vec.end(),great_20());
if(v_i==vec.end()){cout<<"未找到"<<endl;}else{cout<<"找到"<<*v_i<<endl;}
}
//二元谓词
bool great_dayu(int val1,int val2){
return val1>val2;
}
class great_class{
public:
bool operator()(int val1,int val2){
return val1>val2;
}
};
void test02(){
vector<int> vec;
vec.push_back(10);
vec.push_back(50);
vec.push_back(20);
vec.push_back(80);
for_each(vec.begin(),vec.end(),[](int val){cout<<val<<" ";});
cout<<endl;
sort(vec.begin(),vec.end(),great_dayu);
cout<<"排序后:"<<endl;
for_each(vec.begin(),vec.end(),[](int val){cout<<val<<" ";});
cout<<endl;
cout<<"仿函数排序:"<<endl;
sort(vec.begin(),vec.end(),great_class());
for_each(vec.begin(),vec.end(),[](int val){cout<<val<<" ";});
cout<<endl;
//内建函数对象
cout<<"内建函数对象:"<<endl;
sort(vec.begin(),vec.end(),greater<int>());
for_each(vec.begin(),vec.end(),[](int val){cout<<val<<" ";});
cout<<endl;
sort(vec.begin(),vec.end(),less<int>());
for_each(vec.begin(),vec.end(),[](int val){cout<<val<<" ";});
cout<<endl;
plus<int> p;
cout<<p(10,20)<<endl;
}
//适配器(仿函数)
class print_vector:public binary_function<int,int,void>{
public:
void operator()(int val,int temp)const{
cout<<"val:"<<val<<" "<<"temp"<<temp<<" "<<"val+temp" <<val+temp<<" "<<endl;
}
};
void test03(){
vector<int> vec;
vec.push_back(10);
vec.push_back(50);
vec.push_back(20);
vec.push_back(80);
for_each(vec.begin(),vec.end(),[](int val){cout<<val<<" ";});
cout<<endl;
cout<<"适配器:bind2nd"<<endl;
for_each(vec.begin(),vec.end(),bind2nd(print_vector(),100));
cout<<endl;
cout<<"适配器:bind1st"<<endl;
for_each(vec.begin(),vec.end(),bind1st(print_vector(),100));
cout<<endl;
}
//适配器(普通函数)
void plus_temp(int val,int temp){
cout<<val+temp<<endl;
}
void test05(){
vector<int> vec;
vec.push_back(10);
vec.push_back(50);
vec.push_back(20);
vec.push_back(80);
for_each(vec.begin(),vec.end(),[](int val){cout<<val<<" ";});
cout<<endl;
for_each(vec.begin(),vec.end(),bind2nd(ptr_fun(plus_temp),100));
cout<<endl;
}
//成员函数适配器
class person{
public:
string name;
int age;
person(string name,int age){
this->name=name;
this->age=age;
}
void print_person(){
cout<<"name: "<<this->name<<" "<<"age:"<<this->age<<endl;
}
};
void test04(){
vector<person> vec_person;
vec_person.push_back(person("a",1));
vec_person.push_back(person("b",2));
vec_person.push_back(person("c",3));
vec_person.push_back(person("d",4));
for_each(vec_person.begin(),vec_person.end(),mem_fun_ref(&person::print_person));
}
int main()
{
test05();
return 0;
}
c++中谓词与适配器
最新推荐文章于 2025-12-09 11:28:31 发布
978

被折叠的 条评论
为什么被折叠?



