什么是仿函数
所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。
因此,这里需要明确两点:
1 仿函数不是函数,它是个类;
2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用函数)。
假设有一个vector<string>,你的任务是统计长度小于20的字符串的个数,如果使用count_if函数的话,你的代码可能长成这样:
#define STR_LEN 20
bool LengthIsLess(const string& str) {
return str.length()<STR_LEN;
}
int res=count_if(vec.begin(), vec.end(), LengthIsLess);
其中count_if函数的第三个参数是一个函数指针,返回一个bool类型的值。
如果修改LengthIsLess这个函数原型,将原来的宏定义通过参数传进来呢:
bool LengthIsLess(const string& str, int len)
但是他不能满足count_if函数的参数要求:count_if要求的是仅带有一个参数。怎么样找到以上两个函数的一个折中的解决方案呢?
有三种解决方案可以考虑:
1、函数的局部变量;
局部变量不能在函数调用中传递,而且caller无法访问。
2、函数的参数;
这种方法我们已经讨论过了&#x