Введение в Lambda-выражения
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 42 из 56.
Лямбда-выражения — это мощная возможность C++, которая позволяет создавать небольшие анонимные функции прямо там, где они вам нужны. Представьте их как мини-функции, которые можно определять и использовать без необходимости писать отдельное объявление функции.
Базовый синтаксис лямбда-выражения следует этому шаблону: [](){}. Квадратные скобки [] называются списком захвата (capture clause), круглые скобки () содержат параметры (как и в обычных функциях), а фигурные скобки {} содержат тело функции.
Список захвата определяет, какие переменные из внешней области видимости может использовать лямбда-выражение. Наиболее распространенные формы:
[=] — захват всех локальных переменных по значению (лямбда получает собственную копию)[&] — захват всех локальных переменных по ссылке (лямбда обращается к оригиналам)[] — ничего не захватывать (лямбда не может использовать внешние переменные)Вот как создать и вызвать простое лямбда-выражение:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Вызов лямбда-функцииВы также можете определить и выполнить лямбда-выражение немедленно, не сохраняя его в переменной:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Лямбда-выражения особенно полезны для коротких, одноразовых функций, которые вы не хотите определять отдельно. Они делают ваш код более лаконичным и позволяют держать связанную логику вместе.
Задание
ЛегкоСоздайте программу, которая демонстрирует базовый синтаксис и выполнение лямбда-выражений. Это задание проверит ваше понимание того, как определять и вызывать простые лямбда-функции без параметров.
Ваша программа должна:
- Создать лямбда-выражение, которое выводит
Hello from Lambda! - Сохранить это лямбда-выражение в переменную, используя ключевое слово
auto - Вызвать лямбда-функцию для её выполнения
- Создать второе лямбда-выражение, которое выводит
Lambda executed successfully! - Выполнить это второе лямбда-выражение немедленно, не сохраняя его в переменную
Используйте следующий точный формат вывода:
Hello from Lambda!
Lambda executed successfully!Помните, что лямбда-выражения используют синтаксис [](){}, где квадратные скобки [] — это список захвата (capture clause), круглые скобки () содержат параметры (пустые для этого задания), а фигурные скобки {} содержат тело функции. Вы можете сохранить лямбда-выражение в переменной, используя auto variableName = [](){...};, а затем вызвать его с помощью variableName();. Для немедленного выполнения можно использовать синтаксис [](){...}();, который определяет и вызывает лямбда-выражение в одной инструкции.
Шпаргалка
Лямбда-выражения — это анонимные функции, которые могут быть определены внутри кода. Они используют синтаксис [](){}, где:
[]— список захвата (управляет доступом к внешним переменным)()— параметры{}— тело функции
Распространенные формы списка захвата:
[]— ничего не захватывать[=]— захватывать все внешние переменные по значению[&]— захватывать все внешние переменные по ссылке
Сохранение и вызов лямбда-выражения:
auto myLambda = []() {
std::cout << "Hello from Lambda!" << std::endl;
};
myLambda(); // Вызов лямбда-функцииНемедленное выполнение лямбда-выражения:
[]() {
std::cout << "Immediate execution!" << std::endl;
}();Попробуйте сами
#include <iostream>
using namespace std;
int main() {
// TODO: Напишите свой код ниже
// Создайте лямбда-выражение, которое выводит "Hello from Lambda!"
// Сохраните его в переменную, используя ключевое слово auto
// Вызовите лямбда-функцию
// Создайте вторую лямбду, которая выводит "Lambda executed successfully!"
// Выполните её немедленно, не сохраняя в переменную
return 0;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями4Словари (пары ключ-значение)
Знакомство с std::mapСоздание словаряДоступ и изменение значенийПроверка наличия ключейУдаление парИтерация по словарюПовторение: частота слов7Продвинутые функции
Передача по ссылкеВведение в Lambda-выраженияLambda-выражения с параметрамиLambda-выражения с возвращаемыми значениямиВведение в рекурсиюРекурсивный факториалСортировка Lambda2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров