← Назад ко всем вопросам

Что такое лямбда

1️⃣ Как кратко ответить

Лямбда-выражение в C++ — это анонимная функция, которая может быть определена в месте использования. Оно позволяет захватывать переменные из окружающего контекста и использовать их внутри функции. Лямбда-выражения упрощают код, особенно при использовании в алгоритмах и обработке данных.

2️⃣ Подробное объяснение темы

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

Синтаксис лямбда-выражения

Лямбда-выражение имеет следующий общий вид:

[capture](parameters) -> return_type {
    // function body
};
  • capture: Определяет, какие переменные из окружающего контекста могут быть использованы внутри лямбда-выражения. Это может быть:

    • [ ] — ничего не захватывать.
    • [=] — захват всех переменных по значению.
    • [&] — захват всех переменных по ссылке.
    • [x, &y] — захват переменной x по значению и y по ссылке.
  • parameters: Список параметров, аналогичный параметрам обычной функции.

  • return_type: (необязательно) Явное указание типа возвращаемого значения. Если не указано, компилятор выводит его автоматически.

  • function body: Код, который будет выполняться при вызове лямбда-выражения.

Пример использования

Рассмотрим пример, где лямбда-выражение используется для сортировки вектора:

#include <iostream>
#include <vector>
#include <algorithm>
​
int main() {
    std::vector<int> numbers = {5, 2, 8, 1, 3};
​
    // Лямбда-выражение для сортировки вектора по убыванию
    std::sort(numbers.begin(), numbers.end(), [](int a, int b) {
        return a > b; // Сравниваем элементы для сортировки по убыванию
    });
​
    // Вывод отсортированного вектора
    for (int n : numbers) {
        std::cout << n << " "; // Печать каждого элемента вектора
    }
​
    return 0;
}
  • std::sort: Функция стандартной библиотеки для сортировки диапазона.
  • numbers.begin(), numbers.end(): Указатели на начало и конец вектора, определяющие диапазон для сортировки.
  • [](int a, int b) { return a > b; }: Лямбда-выражение, определяющее порядок сортировки. Здесь оно принимает два параметра a и b и возвращает true, если a должно предшествовать b, что приводит к сортировке по убыванию.

Захват переменных

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

Пример с захватом переменной:

#include <iostream>
​
int main() {
    int factor = 2;
    auto multiply = [factor](int value) {
        return value * factor; // Используем захваченную переменную factor
    };
​
    std::cout << multiply(5) << std::endl; // Вывод: 10
​
    return 0;
}
  • factor: Переменная, захваченная по значению.
  • [factor]: Указывает, что переменная factor будет доступна внутри лямбда-выражения.
  • multiply(5): Вызов лямбда-выражения, умножающего переданное значение на factor.

Лямбда-выражения в C++ позволяют писать более компактный и выразительный код, особенно в контексте функционального программирования и работы с алгоритмами. Они широко используются в стандартной библиотеке C++ и являются важной частью современного C++ программирования.

Тема: C++ Язык (квалификаторы, cast, категории значений)
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки