Lambdas com Parâmetros
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 43 de 56.
Agora que você entende a sintaxe básica de lambdas, vamos tornar as lambdas mais úteis adicionando parâmetros. Assim como funções regulares, as lambdas podem aceitar valores de entrada para trabalhar.
Para adicionar parâmetros a uma lambda, coloque-os dentro dos parênteses após a cláusula de captura:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Imprime: Sum: 8A sintaxe de parâmetros funciona exatamente como parâmetros de função regulares - você especifica o tipo seguido pelo nome do parâmetro. Você pode ter múltiplos parâmetros separados por vírgulas, exatamente como mostrado acima.
Você também pode chamar uma lambda com parâmetros imediatamente sem armazená-la:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Imprime: Product: 28Essa capacidade de aceitar parâmetros torna as lambdas muito mais flexíveis e reutilizáveis, permitindo que você crie pequenas funções que podem processar diferentes valores de entrada cada vez que são chamadas.
Desafio
FácilCrie um programa que demonstre expressões lambda com parâmetros construindo uma calculadora simples que realiza diferentes operações matemáticas. Este desafio testará sua compreensão de como definir expressões lambda que aceitam valores de entrada e trabalham com eles.
As seguintes entradas serão fornecidas:
- Dois inteiros
num1enum2representando os números para os cálculos - Um caractere
operationrepresentando a operação matemática a ser realizada
Seu programa deve:
- Criar uma expressão lambda chamada
addque recebe dois parâmetros inteiros e imprime a soma deles no formatoSum: [result] - Criar uma expressão lambda chamada
subtractque recebe dois parâmetros inteiros e imprime a diferença entre eles no formatoDifference: [result] - Criar uma expressão lambda chamada
multiplyque recebe dois parâmetros inteiros e imprime o produto deles no formatoProduct: [result] - Ler os dois números e o caractere de operação da entrada
- Com base no caractere de operação, chamar a lambda apropriada com os dois números
O caractere de operação será um dos seguintes:
+para adição (chame a lambdaadd)-para subtração (chame a lambdasubtract)*para multiplicação (chame a lambdamultiply)
Use o seguinte formato de saída exato com base na operação:
Para adição:
Sum: [result]Para subtração:
Difference: [result]Para multiplicação:
Product: [result]Lembre-se de que os parâmetros da lambda são definidos dentro dos parênteses após a cláusula de captura, usando a mesma sintaxe dos parâmetros de funções regulares. Armazene cada lambda em uma variável usando a palavra-chave auto, e então chame a lambda apropriada com base no caractere de operação de entrada usando uma instrução if-else ou switch.
Folha de consulta
Expressões lambda podem aceitar parâmetros colocando-os dentro de parênteses após a cláusula de captura:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Imprime: Sum: 8A sintaxe dos parâmetros funciona exatamente como os parâmetros de funções regulares - especifique o tipo seguido pelo nome do parâmetro. Múltiplos parâmetros são separados por vírgulas.
Você também pode chamar uma lambda com parâmetros imediatamente sem armazená-la:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Imprime: Product: 28Experimente você mesmo
#include <iostream>
using namespace std;
int main() {
// Ler entrada
int num1, num2;
char operation;
cin >> num1 >> num2 >> operation;
// TODO: Criar expressões lambda para as operações de somar, subtrair e multiplicar
// TODO: Usar uma instrução if-else ou switch para chamar a lambda apropriada com base na operação
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros4Mapas (Pares Chave-Valor)
Introdução ao std::mapCriando um MapaAcessando e Modificando ValoresVerificando ChavesRemovendo ParesIterando sobre um MapaRecapitulação - Frequência de Palavras7Funções Avançadas
Passagem por ReferênciaIntrodução a Expressões LambdaLambdas com ParâmetrosLambdas com Valores de RetornoIntrodução à RecursãoFatorial RecursivoOrdenação com Lambda2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa