STL-алгоритмы — основное применение лямбд в C++. Они превратили императивные циклы в декларативные выражения, делающие код выразительнее и безопаснее.
Классика —
std::transform: std::transform(vec.begin(), vec.end(), vec.begin(), [](int x) { return x * 2; });умножает все элементы на два. Или
std::sort с кастомным компаратором: std::sort(vec.begin(), vec.end(), [](const auto& a, const auto& b) { return a.priority > b.priority; });Предикатные алгоритмы особенно элегантны:
std::count_if, std::find_if, std::remove_if
Вместо циклов с условиями — одна строка:
auto count = std::count_if(vec.begin(), vec.end(), [](int x) { return x > 0; });Логика фильтрации инкапсулирована и переиспользуема.
C++20 ranges делают это ещё лучше:
auto result = vec | std::views::filter([](int x) { return x % 2 == 0; }) | std::views::transform([](int x) { return x * x; });— цепочка трансформаций без промежуточных контейнеров.
Лямбды с алгоритмами — это функциональное программирование в C++. Код становится декларативным, меньше ручного управления итераторами, меньше ошибок off-by-one. Оптимизатор видит больше возможностей для векторизации.
Как часто вы заменяете циклы на STL-алгоритмы с лямбдами?
Библиотека C/C++ разработчика
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😢3😁1