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