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