Condividi tramite


binder2nd Class

Una classe modello che fornisce un costruttore che converte un oggetto funzione binario in un oggetto funzione unario associazione il secondo argomento di funzione binaria a un valore specificato.

template<class Operation>
   class binder2nd
      : public unary_function <
         typename Operation::first_argument_type,
         typename Operation::result_type> 
   {
   public:
   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;
   protected:
   Operation op;
   typename Operation::second_argument_type value;
   };

Parametri

  • _Func
    L'oggetto funzione binario da convertire in un oggetto funzione unario.

  • _Right
    Il valore che il secondo argomento dell'oggetto funzione binario deve essere associato.

  • _Left
    Il valore dell'argomento che l'oggetto binario adatto confronta il valore fisso del secondo argomento.

Valore restituito

L'oggetto funzione unario che risultati dell'associazione il secondo argomento dell'oggetto funzione binario il valore _Right.

Note

La classe modello archivia una copia di un _Func binario dell'oggetto funzione in ope una copia _Right in valore.Definisce la funzione membro operator() come restituire op(_Left, valore).

Se _Func è un oggetto di tipo Operazione e la c è una costante, quindi bind2nd ( _Func, c ) equivale al costruttore di classe binder2nd<Operazione> binder2nd ( _Func, c ) e più semplice.

Esempio

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

Requisiti

intestazione: <functional>

Spazio dei nomi: deviazione standard

Vedere anche

Riferimenti

Thread safety della libreria C++ standard

Libreria di modelli standard