Алгоритмы и ranges
Не пиши цикл, если для этого есть алгоритм
После урока ты сможешь
- Сортировать, искать и считать через std::ranges
- Сортировать структуры по своему правилу
- Строить конвейеры из views::filter и views::transform
Шаг 1 из 7
Не пиши цикл, если есть алгоритм
Вот два способа найти, есть ли в списке отрицательное число:
bool hasNegative = false;
for (const int v : values) {
if (v < 0) {
hasNegative = true;
break;
}
}
const bool hasNegative = std::ranges::any_of(values, [](int v) { return v < 0; });
Второй вариант не только короче. Он сразу говорит, что делается («есть ли хоть один…»), а не как. Цикл приходится прочитать целиком, чтобы понять его смысл. Стандартные алгоритмы к тому же проверены миллионами программ и не ошибаются на единицу.
Алгоритмы живут в <algorithm> (и немного в <numeric>). В C++20 у них появились версии из пространства std::ranges: им передают контейнер целиком, а не пару итераторов.