一、函数对象
1、概念
很多STL算法都使用函数对象(也叫函数符)。函数符是可以以函数方式与()结合使用的任意对象。这包括函数名、指向函数的指针和重载了()运算符的类对象。例如:定义Plus类,并重载()运算符
#include<iostream>
using namespace std;
class Plus{
private:
double y;
public:
Plus():y(0){}
Plus(double y):y(y){}
double operator()(double x){
return x * y;
}
};
int main(){
Plus obj(6);
double x = 4;
cout<<obj(x)<<endl;
return 0;
}
注意:函数对象的本质是一个对象
2、特点
函数对象具备下面的特点
- 函数对象在使用的时候,可以像普通的函数那样调用,可以有参数,可以有返回值
- 函数对象超出普通函数的概念,可以有自己的状态
- 函数对象可以作为参数传递
3、自定义对数组进行处理的函数
template<typename Function>
void process(vector<int> &num, Function f){
for(int i = 0; i < num.size(); i ++){
f(num[i]);
}
}
//声明一个函数符, 输出数组中的每个元素
class Output{
public:
void operator()(int x){
cout<<x<<endl;
}
};
int main(){
int a[5] = {1, 2, 3, 4, 5};
vector<int> num(&a[0], &a[5]);
Output out;
process(num, out);
return 0;
}