Sdílet prostřednictvím


binder2nd – třída

Šablona třídy poskytující konstruktor, který převede objekt binární funkce na objekt unární funkce vazbou druhého argumentu binární funkce na zadanou hodnotu. Zastaralé v jazyce C++11, odebrané v jazyce C++17.

Syntaxe

template <class Operation>
class binder2nd
    : public unaryFunction <typename Operation::first_argument_type,
    typename Operation::result_type>
{
    typedef typename Operation::argument_type argument_type;
    typedef typename Operation::result_type result_type;
    binder2nd(
        const Operation& func,
        const typename Operation::second_argument_type& right);

    result_type operator()(const argument_type& left) const;
    result_type operator()(argument_type& left) const;
};

Parametry

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

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

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

Vrácená hodnota

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

Poznámky

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

Pokud func je objekt typu Operation a c je konstanta, pak bind2nd(func, c) je ekvivalentní binder2nd konstruktor binder2nd<Operation>(func, c)třídy a pohodlnější.

Příklad

// functional_binder2nd.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(),
        binder2nd<greater<int> >(greater<int>(), 10));
    cout << "The number of elements in v1 greater than 10 is: "
         << result1 << "." << endl;

    // Compare using binder1st fixing 1st argument:
    // count the number of integers < 10 in the vector
    vector<int>::iterator::difference_type result2;
    result2 = count_if(v1.begin(), v1.end(),
        binder1st<greater<int> >(greater<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.