Menu
Coddy logo textTech

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

Эта способность принимать параметры делает лямбда-выражения гораздо более гибкими и переиспользуемыми, позволяя вам создавать небольшие функции, которые могут обрабатывать различные входные значения при каждом вызове.

challenge icon

Задание

Легко

Создайте программу, демонстрирующую использование лямбда-выражений с параметрами, создав простой калькулятор, который выполняет различные математические операции. Эта задача проверит ваше понимание того, как определять лямбда-выражения, которые принимают входные значения и работают с ними.

Будут предоставлены следующие входные данные:

  • Два целых числа num1 и num2, представляющие числа для вычислений
  • Символ operation, представляющий математическую операцию для выполнения

Ваша программа должна:

  1. Создать лямбда-выражение с именем add, которое принимает два целочисленных параметра и выводит их сумму в формате Sum: [result]
  2. Создать лямбда-выражение с именем subtract, которое принимает два целочисленных параметра и выводит их разность в формате Difference: [result]
  3. Создать лямбда-выражение с именем multiply, которое принимает два целочисленных параметра и выводит их произведение в формате Product: [result]
  4. Считать два числа и символ операции из входных данных
  5. В зависимости от символа операции вызвать соответствующую лямбду с двумя числами

Символ операции будет одним из следующих:

  • + для сложения (вызов лямбды 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;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком