Как сделать UserCollection пригодным для range‑based цикла без доступа к полю

Добавьте begin() и end(), возвращающие итераторы внутреннего vector. Константные перегрузки позволят тем же способом обходить const UserCollection; специальные операторы не нужны.

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

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

Добавьте begin() и end(), возвращающие итераторы внутреннего vector. Константные перегрузки позволят тем же способом обходить const UserCollection; специальные операторы не нужны.

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

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

Условие

Необходимо изменить структуру UserCollection, чтобы её можно было использовать в range‑based for без обращения к внутреннему массиву.

struct UserCollection {
    std::vector<int> arr;

    // какие члены/операторы добавить?
};

void rangeFunc() {
    UserCollection col;
    for (const auto& item : col) {
        // ...
    }
}

Требуется добавить в структуру необходимые типы‑алиасы, методы begin() и end() (или соответствующие свободные функции), которые будут возвращать итераторы контейнера arr, чтобы цикл for (const auto& item : col) работал напрямую.

Ответ

Добавьте begin() и end(), возвращающие итераторы внутреннего vector. Константные перегрузки позволят тем же способом обходить const UserCollection; специальные операторы не нужны.

struct UserCollection {
    std::vector<int> arr;
    using iterator = std::vector<int>::iterator;
    using const_iterator = std::vector<int>::const_iterator;

    iterator begin() noexcept { return arr.begin(); }
    iterator end() noexcept { return arr.end(); }
    const_iterator begin() const noexcept { return arr.begin(); }
    const_iterator end() const noexcept { return arr.end(); }
};

Типы-алиасы удобны, но сам range-based for их не требует. Он получает границы диапазона и последовательно разыменовывает итератор. Пустой arr корректен: тело цикла ни разу не выполнится. Модификации vector во время обхода требуют учёта инвалидации.

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

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

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

Подробнее