Condividi tramite


Classe binder1st

Modello di classe che fornisce un costruttore che converte un oggetto funzione binaria in un oggetto funzione unario associando il primo argomento della funzione binaria a un valore specificato. Deprecato in C++11 a favore dell'associazione e rimosso in C++17.

Sintassi

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;
};

Parametri

binary_fn
Oggetto funzione binaria da convertire in un oggetto funzione unaria.

left
Valore a cui deve essere associato il primo argomento dell'oggetto funzione binaria.

right
Valore dell'argomento che l'oggetto binario adattato confronta con il valore predefinito del secondo argomento.

Valore restituito

Oggetto funzione unario risultante dall'associazione del primo argomento dell'oggetto funzione binaria al valore a sinistra.

Osservazioni:

Il modello di classe archivia una copia di un oggetto funzione binaria binary_fn in ope una copia di sinistra in value. Definisce la funzione operator() membro come restituzione di op(value, right).

Se binary_fn è un oggetto di tipo Operation ed c è una costante, bind1st(binary_fn, c) è un valore più pratico equivalente a binder1st<Operation>(binary_fn, c). Per altre informazioni, vedere bind1st.

Esempio

// 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.