Lambdas con parámetros
Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 43 de 56.
Ahora que entiendes la sintaxis básica de las lambdas, hagamos que las lambdas sean más útiles añadiendo parámetros. Al igual que las funciones regulares, las lambdas pueden aceptar valores de entrada para trabajar con ellos.
Para añadir parámetros a una lambda, colóquelos dentro de los paréntesis después de la cláusula de captura:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Imprime: Sum: 8La sintaxis de los parámetros funciona exactamente igual que los parámetros de una función normal: especificas el tipo seguido del nombre del parámetro. Puedes tener múltiples parámetros separados por comas, tal como se muestra arriba.
También puedes llamar a una lambda con parámetros inmediatamente sin almacenarla:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Imprime: Product: 28Esta capacidad de aceptar parámetros hace que las lambdas sean mucho más flexibles y reutilizables, permitiéndote crear pequeñas funciones que pueden procesar diferentes valores de entrada cada vez que son llamadas.
Desafío
FácilCrea un programa que demuestre las expresiones lambda con parámetros construyendo una calculadora sencilla que realice diferentes operaciones matemáticas. Este desafío pondrá a prueba tu comprensión sobre cómo definir expresiones lambda que acepten valores de entrada y trabajen con ellos.
Se proporcionarán las siguientes entradas:
- Dos enteros
num1ynum2que representan los números para los cálculos - Un carácter
operationque representa la operación matemática a realizar
Tu programa debe:
- Crear una expresión lambda llamada
addque tome dos parámetros enteros e imprima su suma en el formatoSum: [result] - Crear una expresión lambda llamada
subtractque tome dos parámetros enteros e imprima su diferencia en el formatoDifference: [result] - Crear una expresión lambda llamada
multiplyque tome dos parámetros enteros e imprima su producto en el formatoProduct: [result] - Leer los dos números y el carácter de operación de la entrada
- Basándose en el carácter de operación, llamar a la lambda apropiada con los dos números
El carácter de operación será uno de los siguientes:
+para la suma (llama a la lambdaadd)-para la resta (llama a la lambdasubtract)*para la multiplicación (llama a la lambdamultiply)
Utiliza el siguiente formato de salida exacto basado en la operación:
Para la suma:
Sum: [result]Para la resta:
Difference: [result]Para la multiplicación:
Product: [result]Recuerda que los parámetros de la lambda se definen dentro de los paréntesis después de la cláusula de captura, utilizando la misma sintaxis que los parámetros de una función regular. Almacena cada lambda en una variable utilizando la palabra clave auto, luego llama a la lambda adecuada basándote en el carácter de operación de entrada utilizando una sentencia if-else o una sentencia switch.
Hoja de referencia
Las expresiones lambda pueden aceptar parámetros colocándolos dentro de paréntesis después de la cláusula de captura:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Imprime: Sum: 8La sintaxis de los parámetros funciona exactamente igual que los parámetros de una función normal: especifique el tipo seguido del nombre del parámetro. Los parámetros múltiples se separan por comas.
También puede llamar a una lambda con parámetros inmediatamente sin almacenarla:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Imprime: Product: 28Pruébalo tú mismo
#include <iostream>
using namespace std;
int main() {
// Leer entrada
int num1, num2;
char operation;
cin >> num1 >> num2 >> operation;
// TODO: Crear expresiones lambda para las operaciones de suma, resta y multiplicación
// TODO: Usar una sentencia if-else o switch para llamar a la lambda apropiada según la operación
return 0;
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros4Mapas (Pares Clave-Valor)
Introducción a std::mapCrear un MapaAcceder y Modificar ValoresComprobar ClavesEliminar ParesIterar sobre un MapaResumen - Frecuencia de Palabras7Funciones avanzadas
Paso por referenciaIntroducción a expresiones lambdaLambdas con parámetrosLambdas con valores de retornoIntroducción a la recursividadFactorial recursivoOrdenamiento con lambda2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tarea