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