unaryPred传入一个参数,返回bool值,不可改变序列元素的值。
binaryPred传入两个参数,返回bool值,不可改变序列元素的值。
unaryOp传入一个参数,返回void,可改变序列元素的值(传入引用参数)。
binaryOp传入两个参数,返回void,可改变序列元素的值(传入引用参数)。
书上将这样的参数称为一元谓词或二元谓词。这种参数最简单的构成方式是将它写为仿函数或匿名函数,其它方式过于复杂,就没有做过多了解了。unaryPred的仿函数的定义如下:
bool funtion(int i){
return i>0;
}
对应的匿名函数是:
[ ](int i){return i>0;}
binaryPred的仿函数的定义如下:
bool funtion(int i,int j){
return i>j*2;
}
对应的匿名函数是:
[ ](int i,int j){return i>j*2;}
unaryOp的仿函数的定义如下:
void funtion(int &i){
i=i*2;
cout<<i;
}
对应的匿名函数是:
[ ](int &i){
i=i*2;
cout<<i;
}binaryOp的仿函数的定义如下:
void funtion(int &i,int &j){
i=i*2;
j=j/2;
cout<<i<<" "<<j;
}
对应的匿名函数是:
[ ](int &i,int &j){
i=i*2;
j=j/2;
cout<<i<<" "<<j;
}
仿函数的使用方法是将参数替换为仿函数的名字,如
find_if(beg,end,funtion);
匿名函数的使用方法是将参数替换为匿名函数,如
find_if(beg,end,[ ](int i){return i>0;});