Итерация по вектору {1,2,3} с присвоением e=0 — что произойдёт?

Результат зависит от объявления переменной цикла: auto e изменяет копию, auto& e — элемент вектора. При const auto& присваивание нуля не компилируется.

Короткий ответ

Что ответить на собеседовании

Результат зависит от объявления переменной цикла: auto e изменяет копию, auto& e — элемент вектора. При const auto& присваивание нуля не компилируется.

Подробный разбор

Ответ с пояснениями

Результат зависит от объявления переменной цикла: auto e изменяет копию, auto& e — элемент вектора. При const auto& присваивание нуля не компилируется.

Для обычного std::vector<int> v{1,2,3}:

for (auto e : v) e = 0;   // v остаётся {1,2,3}
for (auto& e : v) e = 0;  // v становится {0,0,0}

auto&& e в range-for по этому вектору тоже связывается с элементом и позволяет его изменить. Без полного заголовка цикла один вариант выбрать нельзя. Отдельно учитывайте proxy-типы вроде vector: их поведение не стоит механически переносить на vector.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее