Найти в Дзене
Dull

C++ Лямбда выражение | С++ для начинающих

Лямбда-выражения в C++ — это удобный способ определения анонимных функций прямо в коде. Они позволяют создавать функции без необходимости их предварительного объявления. Лямбда-выражения особенно полезны при работе с алгоритмами STL, такими как std::sort, std::for_each, std::remove_if и другими. Общий синтаксис лямбда-выражения выглядит следующим образом: [capture](parameters) -> return_type { // тело функции } #include <iostream> int main() { auto greet = []() { std::cout << "Hello, World!" << std::endl; }; greet(); // Вызов лямбда-выражения return 0; } Лямбда с параметрами: #include <iostream> int main() { auto add = [](int a, int b) { return a + b; }; std::cout << "Sum: " << add(5, 3) << std::endl; // Вывод: Sum: 8 return 0; } Лямбда с захватом переменных: #include <iostream> int main() { int x = 10; int y = 20; auto add = [x, y]() { // Захват x и y по значению return x + y; }; std::cout << "Sum: " << add() << std::endl; // Вывод: Sum: 30 return 0; } Лямбда с захватом по ссылке: #in
Оглавление

Лямбда-выражения в C++ — это удобный способ определения анонимных функций прямо в коде. Они позволяют создавать функции без необходимости их предварительного объявления. Лямбда-выражения особенно полезны при работе с алгоритмами STL, такими как std::sort, std::for_each, std::remove_if и другими.

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

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

[capture](parameters) -> return_type {

// тело функции

}

  • capture — это список переменных, которые будут захвачены из окружающего контекста. Это может быть пустым, или содержать переменные по значению или по ссылке.
  • parameters — параметры, которые принимает лямбда (как в обычной функции).
  • return_type — тип возвращаемого значения (можно опустить, если компилятор может вывести его автоматически).
  • тело функции — код, который будет выполнен, когда лямбда будет вызвана.

Примеры использования лямбда-выражений

  1. Простой пример:

#include <iostream>

int main() {

auto greet = []() {

std::cout << "Hello, World!" << std::endl;

};

greet(); // Вызов лямбда-выражения

return 0;

}

Лямбда с параметрами:

#include <iostream>

int main() {

auto add = [](int a, int b) {

return a + b;

};

std::cout << "Sum: " << add(5, 3) << std::endl; // Вывод: Sum: 8

return 0;

}

-2

Лямбда с захватом переменных:

#include <iostream>

int main() {

int x = 10;

int y = 20;

auto add = [x, y]() { // Захват x и y по значению

return x + y;

};

std::cout << "Sum: " << add() << std::endl; // Вывод: Sum: 30

return 0;

}

Лямбда с захватом по ссылке:

#include <iostream>

int main() {

int a = 5;

auto increment = [&a]() { // Захват a по ссылке

a++;

};

increment();

std::cout << "Incremented value: " << a << std::endl; // Вывод: Incremented value: 6

return 0;

}

-3

Использование лямбда в алгоритмах STL:

#include <iostream>

#include <vector>

#include <algorithm>

int main() {

std::vector<int> vec = {1, 2, 3, 4, 5};

// Используем лямбда для вывода элементов вектора

std::for_each(vec.begin(), vec.end(), [](int x) {

std::cout << x << " ";

});

std::cout << std::endl;

// Используем лямбда для удаления четных чисел

vec.erase(std::remove_if(vec.begin(), vec.end(), [](int x) {

return x % 2 == 0; // Условия для удаления

}), vec.end());

// Выводим оставшиеся элементы

std::for_each(vec.begin(), vec.end(), [](int x) {

std::cout << x << " ";

});

return 0;

}

Заключение

-4

Лямбда-выражения в C++ — это мощный инструмент, который делает код более компактным и удобным для чтения, особенно в сочетании с алгоритмами STL.