參數綁定bind

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);

當調用newcallablebind將參數傳給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)

除此之外還可以用bind1stbind2nd 將某個值綁定到函數對象的第一個或者第二個參數上

//通過預定義函數對象求大於2的個數   greater<int>() 有2個參數 
//將 2 綁定到了 greater<int>()的第二個參數上
int num3 = count_if(v1.begin(), v1.end(), bind2nd(greater<int>(), 2 ) );
cout << "num3:" << num3 << endl;
發佈了29 篇原創文章 · 獲贊 12 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章