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;