天天看點

STL: bind1st, bind2nd 的使用(C++)

    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
           

繼續閱讀