Введение в Lambda-выражения
Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 42 из 56.
Lambda expressions — это мощная возможность C++, позволяющая создавать небольшие анонимные функции прямо там, где они нужны. Представляй их как мини-функции, которые можно определить и использовать without необходимости писать отдельное объявление function.
Базовый синтаксис выражения lambda соответствует следующему шаблону: [](){}. Квадратные скобки [] называются capture clause, круглые скобки () содержат параметры (как и обычные function), а фигурные скобки {} содержат тело function.
capture clause управляет тем, какие variable из окружающей области видимости может использовать lambda. Наиболее распространённые формы:
[=]: захватить все локальные variable по значению (lambda получает собственную копию)[&]: захватить все локальные 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 программу, демонстрирующую базовый синтаксис и execution lambda expression. Это испытание проверит ваше понимание того, как определять и вызывать простые lambda function без параметров.
Ваша программа должна:
- Create lambda expression, которая prints
Hello from Lambda! - Store эту lambda в variable using
autokeyword - Call lambda function, чтобы выполнить её
- Create second lambda expression, которая prints
Lambda executed successfully! - Execute эту second lambda immediately without storing её в variable
Используйте следующий точный формат вывода:
Hello from Lambda!
Lambda executed successfully!Помните, that lambda expressions используют синтаксис [](){}, где квадратные скобки [] являются capture clause, круглые скобки () содержат параметры (пустые для этого задания), а фигурные скобки {} содержат тело function. Вы можете Store lambda в variable using auto variableName = [](){...};, а затем вызвать её с помощью variableName();. Для немедленного выполнения можно использовать синтаксис [](){...}();, который определяет и вызывает lambda в одном операторе.
Попробуйте сами
#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++