Lambda-выражения с параметрами
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 43 из 56.
Теперь, когда вы понимаете базовый синтаксис лямбда-выражений, давайте сделаем их более полезными, добавив параметры. Как и обычные функции, лямбда-выражения могут принимать входные значения для работы.
Чтобы добавить параметры в лямбда-выражение, поместите их в круглые скобки после предложения захвата:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Выводит: Sum: 8Синтаксис параметров работает точно так же, как и параметры обычных функций — вы указываете тип, за которым следует имя параметра. Вы можете использовать несколько параметров, разделенных запятыми, как показано выше.
Вы также можете вызвать лямбда-выражение с параметрами немедленно, не сохраняя его:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Выводит: Product: 28Эта способность принимать параметры делает лямбда-выражения гораздо более гибкими и переиспользуемыми, позволяя вам создавать небольшие функции, которые могут обрабатывать различные входные значения при каждом вызове.
Задание
ЛегкоСоздайте программу, демонстрирующую использование лямбда-выражений с параметрами, создав простой калькулятор, который выполняет различные математические операции. Эта задача проверит ваше понимание того, как определять лямбда-выражения, которые принимают входные значения и работают с ними.
Будут предоставлены следующие входные данные:
- Два целых числа
num1иnum2, представляющие числа для вычислений - Символ
operation, представляющий математическую операцию для выполнения
Ваша программа должна:
- Создать лямбда-выражение с именем
add, которое принимает два целочисленных параметра и выводит их сумму в форматеSum: [result] - Создать лямбда-выражение с именем
subtract, которое принимает два целочисленных параметра и выводит их разность в форматеDifference: [result] - Создать лямбда-выражение с именем
multiply, которое принимает два целочисленных параметра и выводит их произведение в форматеProduct: [result] - Считать два числа и символ операции из входных данных
- В зависимости от символа операции вызвать соответствующую лямбду с двумя числами
Символ операции будет одним из следующих:
+для сложения (вызов лямбдыadd)-для вычитания (вызов лямбдыsubtract)*для умножения (вызов лямбдыmultiply)
Используйте следующий точный формат вывода в зависимости от операции:
Для сложения:
Sum: [result]Для вычитания:
Difference: [result]Для умножения:
Product: [result]Помните, что параметры лямбда-выражения определяются внутри круглых скобок после списка захвата, используя тот же синтаксис, что и параметры обычных функций. Сохраните каждое лямбда-выражение в переменную, используя ключевое слово auto, а затем вызовите соответствующую лямбду на основе введенного символа операции, используя оператор if-else или switch.
Шпаргалка
Лямбда-выражения могут принимать параметры, если поместить их в круглые скобки после списка захвата:
auto addNumbers = [](int a, int b) {
std::cout << "Sum: " << (a + b) << std::endl;
};
addNumbers(5, 3); // Выводит: Sum: 8Синтаксис параметров работает точно так же, как и у обычных функций — укажите тип, а затем имя параметра. Несколько параметров разделяются запятыми.
Вы также можете вызвать лямбда-выражение с параметрами немедленно, не сохраняя его:
[](int x, int y) {
std::cout << "Product: " << (x * y) << std::endl;
}(4, 7); // Выводит: Product: 28Попробуйте сами
#include <iostream>
using namespace std;
int main() {
// Чтение входных данных
int num1, num2;
char operation;
cin >> num1 >> num2 >> operation;
// TODO: Создать лямбда-выражения для операций сложения, вычитания и умножения
// TODO: Использовать оператор if-else или switch для вызова соответствующей лямбды в зависимости от операции
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями4Словари (пары ключ-значение)
Знакомство с std::mapСоздание словаряДоступ и изменение значенийПроверка наличия ключейУдаление парИтерация по словарюПовторение: частота слов7Продвинутые функции
Передача по ссылкеВведение в Lambda-выраженияLambda-выражения с параметрамиLambda-выражения с возвращаемыми значениямиВведение в рекурсиюРекурсивный факториалСортировка Lambda2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров