Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um modelo de classe que fornece um construtor que converte um objeto de função binária em um objeto de função unária, associando o primeiro argumento da função binária a um valor especificado. Preterida em C++11 em favor debind e removida em C++17.
Sintaxe
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;
};
Parâmetros
binary_fn
O objeto de função binária a ser convertido em um objeto de função unária.
esquerda
O valor ao qual o primeiro argumento do objeto de função binária deve ser associado.
direita
O valor do argumento que o objeto binário adaptado compara ao valor fixo do segundo argumento.
Valor de retorno
O objeto de função unária que resulta da associação do primeiro argumento do objeto de função binária ao valor left.
Comentários
O modelo de classe armazena uma cópia de um objeto de função binária byney_fn em op
e uma cópia de left em value
. Define sua função membro operator()
como retornando op(value, right)
.
Se binary_fn for um objeto de tipo Operation
e c
for uma constante, então bind1st(binary_fn, c)
se uma equivalente mais para binder1st<Operation>(binary_fn, c)
. Para obter mais informações, consulte bind1st.
Exemplo
// 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.