find_if接受一元谓词,因此传递给find_if的可调用对象必须接受单一参数。
举个例子:
vector<string> vec={.........};
auto wc = find_if(vec.begin(),vec.end(),
[sz](const string &words){return words.size() >= sz;});
当中的lambda表达式[sz](const string &words){return words.size() >= sz;}
,转化为函数很简单,如下所示:
bool check_size(const string &words,string::size_type sz)
{
return words.size() >= sz;
}
但是如果我们在find_if,使用check_size来代替lambda表达式,将会出现问题。
auto wc = find_if(vec.begin(),vec.end(),check_size);
因为在上述表达式中,check_size有两个参数,但是传递给该可调用对像是单一参数,因此这种写法是不正确的。
书中10.3.2节练习10.18,不小心也会出现同样问题。正确写法如下:
auto end_patition = partition(vec.begin(),vec.end(),lambda表达式)
不宜使用函数作为参数。
以上是本人对《c++ primer》书中354页的理解整理。