Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um modelo de classe que mostra um construtor que transforma um objeto de função binária em um objeto de função unária associando o segundo argumento da função binária a um valor especificado. Preterido em C++11, removido em C++17.
Sintaxe
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;
};
Parâmetros
func
O objeto de função binária a ser convertido em um objeto de função unária.
direita
O valor ao qual o segundo argumento do objeto de função binária deve ser associado.
esquerda
O valor do argumento que o objeto binário adaptado compara ao valor fixo do segundo argumento.
Valor retornado
O objeto de função unária que resulta da associação do segundo argumento do objeto de função binária ao valor certo.
Comentários
O modelo de classe armazena uma cópia de um objeto de função binária func em op e uma cópia de right em value. Define sua função membro operator() como retornando op(left, value).
Se func for um objeto do tipo Operation e c for uma constante, bind2nd(func, c) é equivalente ao construtor binder2nd da classebinder2nd<Operation>(func, c) e será mais conveniente.
Exemplo
// 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.