bind
函数 定义在头文件functional
中
当某算法只接受单一参数,而我们需要多个参数来解决问题时要用到参数绑定。
如:
假如我们想找到容器中string长度大于5的元素时定义一个比较函数:
bool check_size(const string &s, string::size_type sz)
{
return s.size() >= sz;
}
但是find_if
第三个参数只接受一元谓词 这时要用到 bind
函数
auto newCallable = bind(callable, arg_list);
当调用newcallable
时bind
将参数传给callable
然后改调用callable
例子:
using std::placeholders::_1;
auto check5 = bind(check_size, _1, 6);
//参数列表中的_n代表占位check_size中的第n个参数
string s = “hello”;
bool = check5(s); //会调用check_size(s, 5)
再调用find_if
:
auto wc = find_if(word.begin(), word.end(), bind(check_size,_1, 5));
//find_if将会调用 check_size(string, 5)
除此之外还可以用bind1st
和 bind2nd
将某个值绑定到函数对象的第一个或者第二个参数上
//通过预定义函数对象求大于2的个数 greater<int>() 有2个参数
//将 2 绑定到了 greater<int>()的第二个参数上
int num3 = count_if(v1.begin(), v1.end(), bind2nd(greater<int>(), 2 ) );
cout << "num3:" << num3 << endl;