Easyrange-for
Почему нужно предпочитать range-based for?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Range-based for (C++11) короче и безопаснее ручной итерации с begin()/end().
// Многословно и error-prone
for (auto it = v.begin(); it != v.end(); ++it) {
process(*it);
}
// Range-based for — короче и яснее
for (const auto& item : v) { // const ref — без копии
process(item);
}
for (auto& item : v) { // ref — для модификации
item *= 2;
}
// Работает с C-array, initializer_list, ranges (C++20)
for (int x : {1, 2, 3}) { /* ... */ }
for (auto x : v | std::views::filter(pred)) { /* ... */ }Для больших типов — const auto& (без копии). Не подходит, когда нужен индекс или модификация контейнера во время итерации.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.