Что такое лямбда
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++ программирования.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться