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.
Uma classe de modelo que fornece um construtor que converte um objeto binária de função em um objeto unário da função que o primeiro argumento da função binário para um valor especificado.
template<class Operation>
class binder1st
: public unary_function <
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 & _Func,
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
_Func
O objeto binária da função a ser convertido em um objeto unário de função._Left
O valor que o primeiro argumento do objeto binária da função deve ser associado._Right
O valor do argumento que o objeto binário adaptado compara o valor fixo do segundo argumento.
Valor de retorno
O objeto unário de função que resultados de associação o primeiro argumento do objeto binária de função ao valor _Left.
Comentários
A classe de modelo armazena uma cópia de um objeto binário _Func de função em op, e uma cópia de _Left em value.Define sua função de membro operator() como retornar op(value, _Right).
Se _Func é um objeto do tipo Operação e c é uma constante, então bind1st ( _Func, c ) é equivalente ao construtor binder1st<Operação> da classe de binder1st ( _Func, c ) e mais conveniente.
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;
}
Requisitos
Cabeçalho: <functional>
namespace: STD