1.定義了調用操作符的類,其對象稱為函數對象,即它們是行為類似函數的對象
Example:
class abs
{
public:
int operator()(int i)
{
return i>=0?i:-i;
}
};
int main()
{
abs ob;
cout<<ob(-1)<<endl; //1
return 0;
};
2.标準庫定義的函數對象
頭檔案#include<functional>
Tips:
*每個類表示一個給定操作符
*每個函數對象類都是一個類模闆
Example:
int main()
{
plus<int> add;
cout<<add(1,1)<<endl;//2
return 0;
};
3.在範型算法中使用标準函數對象
*函數對象常用于覆寫算法使用的預設操作符
Example:
int main()
{
int arr[]={3,1,4,2,5};
vector<int> vec(arr,arr+5);
sort(vec.begin(),vec.end(),greater<int>());
for(vector<int>::iterator it=vec.begin();it!=vec.end();it++)
{
cout<<*it<<"\t"; //5 4 3 2 1
}
return 0;
};
4.函數對象的函數擴充卡
作用:用于特化和擴充一進制和二進制函數對象
*綁定器:每個綁定其接受一個函數對象和一個值
bind1st:将定值綁定到二進制函數對象的第一個實參
bind2nd:将定值綁定到二進制函數對象的第二個實參
int main()
{
int arr[]={3,1,4,2,5};
int res;
res=count_if(arr,arr+5,bind2nd(greater<int>(),2));
cout<<res<<endl; //3
return 0;
};
*求反器:将函數對象的真值求反
not1:将一進制函數對象的真值求反
not2:将二進制函數對象的真值求反
Eample:
int main()
{
int arr[]={3,1,4,2,5};
int res;
res=count_if(arr,arr+5,not1(bind2nd(greater<int>(),2)));
cout<<res<<endl;//2
return 0;
};