Easyалгоритмы
Чем std::transform отличается от std::for_each?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
std::for_each — вызывает f(element) для side effects (печать, accumulate). std::transform — применяет f и записывает результат в выходной итератор (как map в функциональных языках).
std::vector<int> v{1, 2, 3};
// for_each — side effects
std::for_each(v.begin(), v.end(), [](int x) { std::cout << x; });
// transform — создаёт новую последовательность
std::vector<int> out(v.size());
std::transform(v.begin(), v.end(), out.begin(),
[](int x) { return x * 2; }); // out = {2, 4, 6}
// С C++20 views::transform даёт lazy (без аллокации) transform- for_each — для side effects, transform — для создания новой последовательности;
- transform возвращает end выходного итератора.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.