Freigeben über


bind2nd-Funktion

Eine Hilfevorlagenfunktion, mit der ein Adapter erstellt wird, um ein binäres Funktionsobjekt in ein unäres Funktionsobjekt zu konvertieren, indem das zweite Argument der binären Funktion an einen angegebenen Wert gebunden wird.

template<class Operation, class Type> 
   binder2nd <Operation> bind2nd( 
      const Operation& _Func,  
      const Type& _Right 
   );

Parameter

  • _Func
    Das einem Funktionsobjekt unären zu konvertierende binäre Funktionsobjekt.

  • _Right
    Der Wert, auf das das zweite Argument des binären Funktionsobjekts gebunden werden soll.

Rückgabewert

Das unäre Funktionsobjekt, das aus dem Binden des zweiten Arguments des binären Funktionsobjekts dem Wert _Right. entsteht

Hinweise

Funktionsbinder sind eine Art Funktionsadapter und, da Funktionsobjekten zurückgeben, können in bestimmten Typen der Funktionszusammensetzung verwendet werden, um die leistungsstarkeren schwierigeren und Ausdrücke zu erstellen.

Wenn _Func ein Objekt des Typs Vorgang aufweist und c eine Konstante ist, dann ist bind2nd ( _Func, c ) z binder2ndbinder2nd <Operation>-Klassenkonstruktor ( _Func, c ) und bequemeres entsprechend.

Beispiel

// functional_bind2nd.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 greaterthan15: unary_function<int, bool>
{
public:
    result_type operator()(argument_type i)
    {
        return (result_type)(i > 15);
    }
};

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

    // Compare counting the number of integers > 15 in the vector
    // with a user-defined function object
    vector<int>::iterator::difference_type result1b;
    result1b = count_if(v1.begin(), v1.end(), greaterthan15());
    cout << "The number of elements in v1 greater than 15 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(), bind1st(greater<int>(), 10));
    cout << "The number of elements in v1 less than 10 is: "
         << result2 << "." << endl;
}
  

Anforderungen

Header: <functional>

Namespace: std

Siehe auch

Referenz

Standardvorlagenbibliothek