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 подскажет развёрнутый ответ в реальном времени.