Lambdas em C ++

Lambdas em C ++
“Com a ajuda de ilustrações, discutiremos as funções C ++ Lambda neste artigo.

Podemos definir instâncias do método anônimo em declarações C ++ Lambda, que poderiam ser utilizadas embutidas ou fornecidas como parâmetros. Como não teremos que substituir o operador em uma classe ou estrutura diferente, eles são muito mais eficazes.”

Sintaxe da função lambda

O Lambda Introdutor [] neste caso representa o início da declaração Lambda, e a lista de argumentos [] é idêntica ao operador () de um método padrão.

Exemplo nº 1

Nesse caso, compilamos um código básico de instrução C ++ Lambda que exibe o nome da Alemanha.

#incluir
usando namespace std;
int main ()
Auto Country = [] ()
cout << "Germany";
;
país();
retornar 0;

Incluiremos o arquivo de cabeçalho necessário e o espaço para nome padrão no início do programa. Então começamos a codificação dentro da função principal (). Criaremos um método Lambda usando a palavra -chave "Auto". Atribuiremos a variável "país" ao método Lambda. Então, usando a variável país e o operador (), invocamos o método Lambda. Além disso, usamos a declaração "cout" para imprimir o nome do país. Vamos invocar a função lambda. No final, acabamos de entrar no comando "retornar 0".

Exemplo nº 2

As declarações lambda também exigiriam argumentos, assim como um método padrão. Aqui, construímos um método Lambda que exibe a soma de dois números. O método Lambda foi então chamado com dois parâmetros inteiros.

#incluir
usando namespace std;
int main ()
AUTO add = [] (int x, int y)
cout << "Sum of two numbers = " << x + y;
;
add (250, 69);
retornar 0;

Iniciamos o programa incluindo a biblioteca . Em seguida, utilizamos o espaço de nome padrão. Vamos chamar a função principal (). Agora criamos uma função lambda de "add". Aqui passamos duas variáveis ​​como os argumentos desta função. A declaração "cout" está sendo usada para imprimir a soma desses valores especificados. Na próxima etapa, chamamos o método Lambda. Este método contém dois números inteiros como seus parâmetros. Por fim, temos que entrar no comando 'retornar 0'.

Exemplo no 3

Aqui, construímos um método Lambda para determinar a média de 2 números e a soma de 2 números. Ao fornecer "s" como o terceiro parâmetro para main (), podemos calcular a soma de dois números. Mesmo que o lambda forneça um número aleatório neste caso, a conversão de tipo duplo é feita diretamente. A média é então calculada usando uma string diferente como o parâmetro:

#incluir
usando namespace std;
int main ()
Auto op = [] (int i, int j, string op) -> duplo
if (op == "s")
retornar i + j;

outro
retornar (i + j) / 2.0;

;
int n_1 = 11;
int n_2 = 21;
auto s = op (n_1, n_2, "s");
cout << "Sum of two numbers= " << s << endl;
média automática = op (n_1, n_2, "média");
cout << "Average = " << average;
retornar 0;

Vamos integrar o módulo para funcionalidades de entrada e saída. A função Lambda terá sido criada na próxima etapa. Aqui a função Lambda "OP" é aplicada pelo seu tipo de retorno explícito "duplo". Esta função lambda retorna a soma ou a média dos valores. Forneceremos duas variáveis ​​com um tipo de dados inteiro e uma string como parâmetros da função Lambda.

Além disso, aplicamos a declaração "se". Se o valor da variável "OP" for igual à soma dos números. Em seguida, ele retorna o valor adicionando os dois números. Caso contrário, ele retorna a média dividindo a soma dos números por 2. Inicializamos duas novas variáveis ​​e definimos seus valores. Usamos a declaração "cout" para mostrar a soma. Agora, para obter a média dos valores necessários, aplicamos a função Lambda "média". Demos os números inteiros como argumentos a esta função lambda. A declaração "cout" será usada para mostrar o valor médio. Para rescindir o código, empregaremos "Return 0".

Exemplo no 4

Por padrão, os métodos Lambda não conseguem recuperar as variáveis ​​da função recuada. Utilizamos a declaração de captura para obter acesso a esses atributos. Isso é idêntico a invocar um método por valor. Quando o lambda é construído neste caso, o valor original é levado. A variável incluída no argumento Lambda só será lida neste momento; não pode ser mudado.

A seguir, é apresentado um exemplo de uma função lambda simples com captura por valor:

Assim, a função Lambda tem acessibilidade à variável int “n” devido à inicial “s”. Como int “n” não será recuperado do corpo Lambda, a menos que o eliminemos da cláusula de captura, então encontraremos um erro.

#incluir
usando namespace std;
int main ()
int inicial_s = 389;
AUTO add_to_s = [Initial_s] (int n)
retornar inicial_s + n;
;
int final_s = add_to_s (45);
cout << "389 + 45 = " << final_s;
retornar 0;

Primeiro de tudo, para processos de entrada e saída, o arquivo de cabeçalho será incluído. Junto com este espaço de nome padrão será adicionado. Agora chamamos a função principal (). Dentro do corpo da função principal (), inicializamos uma variável "Initial_s". Especificamos o valor "389" para esta variável. Em seguida, capturamos a variável "Initial_s" pelo seu valor. Portanto, estamos usando a função lambda de "add_to_s". Passaremos duas variáveis ​​como parâmetro para a função Lambda.

O primeiro parâmetro mostra a variável "Initial_s", e o segundo parâmetro mostra a variável "n". A soma será mantida em uma variável "final_s". O tipo de dados dessa variável é um número inteiro. Antes de adicionar o comando "retornar 0", temos que utilizar a declaração "cout". A declaração "cout" mostra o valor resultante.

Conclusão

O guia de declarações C ++ Lambda concluiu. A nova noção em C ++, execução embutida, é altamente útil sempre que precisamos executar um pequeno pedaço de código. Além disso, os lambdas podem ser declarados genéricos e aplicados a qualquer tipo de dados. Este artigo tem quatro instâncias separadas que implementamos totalmente. A função Lambda é usada sem argumentos em primeira instância. Fornecemos o método Lambda com uma variedade de parâmetros no segundo exemplo. Da mesma forma, utilizamos o tipo de retorno explícito do método Lambda no terceiro cenário. A função lambda e a cláusula de captura foram usadas no último.