binder1st — Klasa
Szablon klasy dostarczający konstruktor, który konwertuje obiekt funkcji binarnej na obiekt funkcji jednoargumentowej przez powiązanie pierwszego argumentu funkcji binarnej z określoną wartością. Przestarzałe w języku C++11 na rzecz powiązania i usunięte w języku C++17.
Składnia
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;
};
Parametry
binary_fn
Obiekt funkcji binarnej, który ma zostać przekonwertowany na obiekt funkcji jednoargumentowej.
Lewy
Wartość, do której należy powiązać pierwszy argument obiektu funkcji binarnej.
Prawy
Wartość argumentu, który jest porównywany przez dostosowany obiekt binarny z stałą wartością drugiego argumentu.
Wartość zwracana
Obiekt funkcji jednoargumentowej, który wynika z powiązania pierwszego argumentu obiektu funkcji binarnej z wartością po lewej stronie.
Uwagi
Szablon klasy przechowuje kopię obiektu funkcji binarnej binary_fn w pliku op
i kopię lewej w value
pliku . Definiuje funkcję składową jako zwracaną op(value, right)
przez funkcję operator()
.
Jeśli binary_fn jest obiektem typu Operation
i c
jest stałą, bind1st(binary_fn, c)
jest to wygodniejszy odpowiednik binder1st<Operation>(binary_fn, c)
. Aby uzyskać więcej informacji, zobacz bind1st.
Przykład
// 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.