Partager via


bind1st, fonction

Une fonction modèle d'aide qui crée un adaptateur pour convertir un objet fonction binaire en un objet fonction unaire en liant le premier argument de la fonction binaire à une valeur spécifiée.

template<class Operation, class Type> 
   binder1st <Operation> bind1st( 
      const Operation& _Func,  
      const Type& _Left 
   );

Paramètres

  • _Func
    L'objet de la fonction binaire à convertir en un objet de fonction unaire.

  • _Left
    La valeur à laquelle le premier argument de l'objet de la fonction binaire doit être lié.

Valeur de retour

L'objet de la fonction unaire qui résulte de la liaison du premier argument de l'objet de fonction binaire à la valeur _Left.

Notes

Les classeurs de fonction sont un type de fonction et, parce qu'ils retournent des objets fonction, peuvent être utilisés dans certains types de publication de fonction pour créer des expressions plus compliquées et plus puissantes.

Si _Func est un objet de type Operation et que c est une constante, alors bind1st (_Func, c) est équivalent au constructeur de classe binder1st binder1st<Operation> (_Func, c) et est plus pratique.

Exemple

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

using namespace std;

// Creation of a user-defined function object
// that inherits from the unary_function base class
class greaterthan5: unary_function<int, bool>
{
public:
    result_type operator()(argument_type i)
    {
        return (result_type)(i > 5);
    }
};

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 result1a;
    result1a = count_if(v1.begin(), v1.end(), bind1st(less<int>(), 10));
    cout << "The number of elements in v1 greater than 10 is: "
         << result1a << "." << endl;

    // Compare: counting the number of integers > 5 in the vector
    // with a user defined function object
    vector<int>::iterator::difference_type result1b;
    result1b = count_if(v1.begin(), v1.end(), greaterthan5());
    cout << "The number of elements in v1 greater than 5 is: "
         << result1b << "." << endl;

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

Configuration requise

En-tête : <functional>

Espace de noms : std

Voir aussi

Référence

Bibliothèque STL (Standard Template Library)