binder1st-Klasse

Eine Klassenvorlage, die einen Konstruktor bereitstellt, der ein binäres Funktionsobjekt in ein unäres Funktionsobjekt konvertiert, indem das erste Argument der binären Funktion an einen angegebenen Wert gebunden wird. Veraltet in C++11 zugunsten der Bindung und entfernt in C++17.

Syntax

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

Parameter

binary_fn
Das binäre Funktionsobjekt, das in ein unäres Funktionsobjekt konvertiert werden soll.

left
Der Wert, an den das erste Argument des binären Funktionsobjekts gebunden werden soll.

right
Der Wert des Arguments, den das angepasste binäre Objekt mit dem festen Wert des zweiten Arguments vergleicht.

Rückgabewert

Das unäre Funktionsobjekt, das aus der Bindung des ersten Arguments des binären Funktionsobjekts an den wert links resultiert.

Hinweise

Die Klassenvorlage speichert eine Kopie eines binären Funktionsobjekts binary_fn in opund eine Kopie von links in value. Sie definiert die Memberfunktion operator() als Rückgabe op(value, right).

Wenn binary_fn ein Objekt vom Typ Operation ist und c eine Konstante ist, ist dies bind1st(binary_fn, c) ein komfortableres Äquivalent zu binder1st<Operation>(binary_fn, c). Weitere Informationen finden Sie unter bind1st.

Beispiel

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