Как итерируется ranged for?

Для использования ranged for контейнер должен удовлетворять ряду условий. В частности, для контейнера можно определить функции begin( __range ) и end( __range ), доступные по ADL.

Но как быть в том случае, если линейная итерация по контейнеру невозможна? Что в таком случае должны возвращать функции begin и end?
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Итераторы - это абстракция созданная для того что бы можно было один и тот же подход применять для обхода принципиально разных контейнеров.
Реализация итератора - это класс реализующий определенный интерфейс, как вы и написали. Внутри класса реализуйте как хотите, сохраняйте состояния, ссылки, счетчики в приватных членах данных класса итератора и т.д. и т.п. begin с end должны возвращать ссылку на соответствующий итератор. begin и end не входят в интерфейс итератора.
Учите матчасть.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Советую зайти в документацию и прочитать про типы итераторов и что это такое.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы