C ++ std_function

C ++ std_function

Em C ++, STD significa padrão. C ++ pode ter uma classe definida da qual os objetos são instantados. Uma função definida normal é como uma classe. A chamada de função é como um objeto para a classe de função definida. Uma chamada de função, em momentos diferentes, com argumentos diferentes, é como objetos de função diferentes. Agora, C ++ tem classes de função predefinidas, onde diferentes objetos de função podem ser oficialmente instantados. Um objeto de função também pode ser usado, como uma chamada de função. Pode ser um argumento de função de retorno de chamada em outra chamada de função. Um objeto de função pode substituir um ponteiro para uma função normal.

A função std :: é uma declaração de protótipo de função com o nome, function () no cabeçalho, da biblioteca. Isso significa que, para usar a função STD ::, o cabeçalho ou o cabeçalho deve ser incluído no programa. A função std :: também é um invólucro que leva um objeto de função como argumento, para produzir outro objeto de função.

Este artigo explica a função C ++ STD ::, começando com algumas classes de função predefinida.

Conteúdo do artigo

- Algumas classes de função predefinidas

- std :: transform

- std :: function apropriado

- Conclusão

Algumas classes de função predefinidas

O cabeçalho funcional possui muitos protótipos de classe de função predefinidos, nas categorias de, reference_wrapper, operações aritméticas, comparações, classe Compare_three_way, operações lógicas, operações bitwise, Bind, invólucros polimórficos, pesquisadores e modelo de classe Hashh Hashh.

Na categoria aritmética, dois dos protótipos da classe de função são:

modelo estrutura nega;
e
modelo estrutura plus;

Nota: Uma estrutura é um tipo de classe. O primeiro negaria números em uma lista. O segundo adicionaria números correspondentes de duas listas, resultando em uma lista das adições.

std :: transform

Existe a função std :: transform () na biblioteca de algoritmo. Esta função levaria o início e o fim de um vetor e usaria o objeto de função negativa para negar todos os elementos do vetor. O objeto Negate Function é o último argumento da chamada de função transform (). Um protótipo (sintaxe) é:

modelo
Transformação do constExPr OutputIterator (InputIterator First1, InputIterator last1,
Resultado de outputIterator, Op Op);

onde o outputiterator é um segundo vetor para os números negados resultantes. O outputIterator também é retornado.

O programa a seguir mostra o uso da sintaxe:

#incluir
#incluir
#incluir
#incluir
usando namespace std;
vetor vtr1 = 1, 2, 3, 4, 5;
Vectorvtrout (5);
int main ()

Transformar (Vtr1.BEGIN (), VTR1.end (), vtrout.begin (), negate ());
para (int i = 0; icout<cout<retornar 0;

A saída é:

-1 -2 -3 -4 -5

As diretivas incluem, iostream, algoritmo, cabeçalhos funcionais e vetoriais. O espaço para nome padrão é usado. Os vetores de entrada e saída são do mesmo tamanho. A função std :: transform () é usada sem, retornando, pois o item de retorno é um argumento de função de transformação. O loop for imprime os números negados na saída. Um item de retorno para a função de transformação teria sido codificado da seguinte maneira:

vtrout.begin () = transform (vtr1.BEGIN (), VTR1.end (), vtrout.BEGIN (), NEGATE());

Em uma forma sobrecarregada, a função transform () levaria o início e o fim de um vetor. Em seguida, o início de outro vetor e use o objeto de função A Plus para adicionar os números correspondentes dos dois vetores para ter um novo vetor com as somas. O objeto de função Plus, é o último argumento da chamada de função de transformação, para esse fim. O protótipo (sintaxe) é:

modeloClasse Uatiterator, Classe BinaryOperation>
Transformação do constExPr OutputIterator (InputIterator1 First1, InputIterator1 last1,
InputIterator2 First2, resultado do outputiterator, binaryoperation binary_op);

onde o outputIterator é um terceiro vetor para os números de soma resultantes. O outputIterator também é retornado, mas isso não precisa ser implementado. Veja o seguinte programa:

#incluir
#incluir
#incluir
#incluir
usando namespace std;
vetor vtr1 = 1, 2, 3, 4, 5;
vetor vtr2 = 10, 20, 30, 40, 50;
Vectorvtrout (5);
int main ()

Transformar (Vtr1.BEGIN (), VTR1.end (), vtr2.BEGIN (), VTROUT.begin (), mais ());
para (int i = 0; icout<cout<retornar 0;

A saída é:

11 22 33 44 55

As diretivas incluem, iostream, algoritmo, cabeçalhos funcionais e vetoriais. O espaço para nome padrão é usado. Os dois vetores de entrada e um de saída são do mesmo tamanho. A função std :: transform () é usada sem, retornando, pois o item de retorno é um argumento de função de transformação. O loop for imprime os números somados na saída.

std :: function apropriado

Tudo o que foi acima explicou como usar um objeto de função, profissionalmente. É possível para o programador escrever sua própria função como a função transform () e usar seu próprio objeto de função que ele escreveu.

STD :: Função não é grande coisa. É um invólucro que consideraria qualquer objeto de função como argumento. Esta seção do artigo ilustra como criar um objeto de função simples e envolvê -lo em std :: function.

Um objeto de função é um objeto chamável. Um objeto chamável é qualquer objeto que possa ser usado como uma função. Um exemplo de classe de função é mostrado no seguinte código:

#incluir
#incluir
usando namespace std;
estrutura structfn
int operator () (int a, int b)
int c = a + b;
retornar c;

;
Structfnfn

Esta é a parte superior do programa, sem apenas a função principal C ++. Uma estrutura é como uma classe. Este código tem a definição de uma estrutura, chamada structfn (equivalente ao nome da classe). A estrutura tem apenas um membro, que é o operador de parênteses. Um operador é um pouco uma função. Esta função leva dois números inteiros como argumentos e retorna outro número inteiro. Na verdade retorna a soma dos dois números inteiros. A estrutura, structfn é um tipo de objeto de função.

O objeto instanciado da estrutura, estrutura é fn. "STD :: function", é outro tipo (classe). A última declaração no código acima, instancia um objeto de std :: function (onde std :: é omitido porque está em “Usando o namespace std;”). O nome do objeto padrão para "std :: function", é f. "F ()" é um construtor de objeto. Nesse caso, seu único argumento é fn, que é um objeto da classe de função, structfn. Esta última afirmação envolve o objeto de função.

O operador (função) da classe de função (struct) tem dois argumentos de tipos int e int e int. Ele retorna outro int. Esses recursos de assinatura podem ser representados como: int (int, int). É por isso que a especialização do modelo, da construção da função, é .

A sintaxe para o construtor de funções, usada acima, é:

modelo função de classe;

O restante do programa é a função C ++ Main (). Isso é:

int main ()

int z = f (2, 3);
cout << z << endl;
retornar 0;

A saída é 5. F (2,3) foi usado em vez de FN (2,3).

A vantagem da função STD ::.

O objeto de função acima pode ser modificado, a ser usado como um retorno de chamada de função Plus, na chamada da função de transformação.

Conclusão

A função STD :: é do cabeçalho funcional, que deve ser incluído no programa para que seja usado. Envolve um objeto de função. O objeto de função tem que ser seu argumento (da construção da função STD ::). Um objeto de função é um objeto chamável. Um objeto chamável é qualquer objeto que possa ser usado como uma função. A vantagem da função STD ::.