bind1st 和 bind2nd 函數用于将一個二進制算子(binary functor,bf)轉換成一進制算子(unary functor,uf)。它們均需要兩個參數:要轉換的 fn 和一個值 x。簡單了解,bind1st 把 x 作為 fn 的左值,bind2nd 把 x 作為 fn 的右值。看以下代碼即可看出其功能:
vector<int> vec = {1, 2, 2, 3, 4};
auto pos1 = find_if(vec.begin(), vec.end(), bind1st(less<int>(), 2));
cout << *pos1 << endl;
auto pos2 = find_if(vec.begin(), vec.end(), bind2nd(less<int>(), 2));
cout << *pos2 << endl;
輸出為
3
1
明白了這一點,我們便可對一個數組中滿足一定條件的所有元素執行各種操作,如删除上面數組中所有值為 ≦ 2 的元素。
vector<int> vec = {1, 2, 2, 3, 4};
vec.erase(remove_if(vec.begin(), vec.end(),bind2nd(less_equal<int>(), 2)), vec.end());
for(auto& x : vec)
cout << x << " ";
輸出 為
3 4