Зачем алгоритмы вместо циклов
Вопрос
Почему в C++ советуют использовать алгоритмы STL вместо ручных циклов? Приведите примеры замены.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Имя алгоритма объясняет намерение
Меньше ошибок на границах и с итераторами
Оптимизированные реализации (memmove, векторизация)
Примеры: find_if, count_if, any_of, transform, erase_if, accumulate
Ranges делают вызовы короче и добавляют ленивые представления
Ручной цикл уместен, когда логика не ложится на один алгоритм
Что могут спросить следом
- Когда range-for понятнее алгоритма?
- Что такое execution policies?
Разбор
Алгоритм называет намерение: std::any_of(users, is_admin) читается быстрее, чем цикл с флагом и break. Меньше мест для ошибок: границы, инвалидация итераторов при удалении, забытый ++. Реализации в библиотеке хорошо оптимизированы, например std::copy для тривиальных типов превращается в memmove, а std::fill в memset. Типичные замены: поиск по условию на find_if, подсчёт на count_if, проверка на any_of, all_of, none_of, преобразование на transform, удаление на erase_if, сумма на accumulate или reduce. В C++20 ranges убирают пары итераторов и дают проекции и ленивые представления. Но если логика не ложится на один алгоритм и требует трёх вложенных лямбд, честный range-for понятнее. Для параллельности есть политики выполнения std::execution::par, но в libstdc++ они работают через Intel TBB.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.