binder2nd-Klasse
Eine Klassenvorlage, die einen Konstruktor bereitstellt, der ein binäres Funktionsobjekt in ein unäres Funktionsobjekt konvertiert, indem das zweite Argument der Binären Funktion an einen angegebenen Wert gebunden wird. Veraltet in C++11, entfernt in C++17.
Syntax
template <class Operation>
class binder2nd
: public unaryFunction <typename Operation::first_argument_type,
typename Operation::result_type>
{
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;
};
Parameter
func
Das binäre Funktionsobjekt, das in ein unäres Funktionsobjekt konvertiert werden soll.
right
Der Wert, an den das zweite Argument des binären Funktionsobjekts gebunden werden soll.
left
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 zweiten Arguments des binären Funktionsobjekts an den Wert rechts resultiert.
Hinweise
Die Klassenvorlage speichert eine Kopie eines Binärfunktionsobjekt-Func in op
und eine Kopie von rechts in value
. Sie definiert die Memberfunktion operator()
als Rückgabe op(left, value)
.
Wenn Func ein Objekt vom Typ Operation
ist und c eine Konstante ist, ist bind2nd(func, c)
gleichbedeutend mit dem binder2nd
Klassenkonstruktor binder2nd<Operation>(func, c)
und bequemer.
Beispiel
// 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;
}
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.