Sdílet prostřednictvím


binder1st – třída

Šablona třídy poskytující konstruktor, který převádí objekt binární funkce na objekt unární funkce vazbou prvního argumentu binární funkce na zadanou hodnotu. Vyřazeno v jazyce C++11 ve prospěch vazby a odebráno v jazyce C++17.

Syntaxe

template <class Operation>
class binder1st
    : public unaryFunction <typename Operation::second_argument_type,
                             typename Operation::result_type>
{
public:
    typedef typename Operation::argument_type argument_type;
    typedef typename Operation::result_type result_type;
    binder1st(
        const Operation& binary_fn,
        const typename Operation::first_argument_type& left);

    result_type operator()(const argument_type& right) const;
    result_type operator()(const argument_type& right) const;

protected:
    Operation op;
    typename Operation::first_argument_type value;
};

Parametry

binary_fn
Binární objekt funkce, který se má převést na objekt unární funkce.

Vlevo
Hodnota, ke které má být vázán první argument objektu binární funkce.

Právo
Hodnota argumentu, který přizpůsobený binární objekt porovnává s pevnou hodnotou druhého argumentu.

Vrácená hodnota

Unární objekt funkce, který je výsledkem vazby prvního argumentu objektu binární funkce na hodnotu vlevo.

Poznámky

Šablona třídy ukládá kopii objektu binární funkce binary_fn do opa kopii vlevo v value. Definuje svou členovou funkci operator() jako návrat .op(value, right)

Je-li binary_fn objekt typu Operation a c je konstanta, bind1st(binary_fn, c) je vhodnější ekvivalentem binder1st<Operation>(binary_fn, c). Další informace naleznete v tématu bind1st.

Příklad

// functional_binder1st.cpp
// compile with: /EHsc
#include <vector>
#include <functional>
#include <algorithm>
#include <iostream>

using namespace std;

int main()
{
    vector<int> v1;
    vector<int>::iterator Iter;

    int i;
    for (i = 0; i <= 5; i++)
    {
        v1.push_back(5 * i);
    }

    cout << "The vector v1 = ( ";
    for (Iter = v1.begin(); Iter != v1.end(); Iter++)
        cout << *Iter << " ";
    cout << ")" << endl;

    // Count the number of integers > 10 in the vector
    vector<int>::iterator::difference_type result1;
    result1 = count_if(v1.begin(), v1.end(),
        binder1st<less<int> >(less<int>(), 10));
    cout << "The number of elements in v1 greater than 10 is: "
         << result1 << "." << endl;

    // Compare use of binder2nd fixing 2nd argument:
    // count the number of integers < 10 in the vector
    vector<int>::iterator::difference_type result2;
    result2 = count_if(v1.begin(), v1.end(),
        binder2nd<less<int> >(less<int>(), 10));
    cout << "The number of elements in v1 less than 10 is: "
         << result2 << "." << endl;
}
The vector v1 = ( 0 5 10 15 20 25 )
The number of elements in v1 greater than 10 is: 3.
The number of elements in v1 less than 10 is: 2.