Как итерируется ranged for?
Советую зайти в документацию и прочитать про типы итераторов и что это такое.
Итераторы - это абстракция созданная для того что бы можно было один и тот же подход применять для обхода принципиально разных контейнеров. 
Реализация итератора - это класс реализующий определенный интерфейс, как вы и написали. Внутри класса реализуйте как хотите, сохраняйте состояния, ссылки, счетчики в приватных членах данных класса итератора и т.д. и т.п. begin с end должны возвращать ссылку на соответствующий итератор.  begin и end не входят в интерфейс итератора.
Учите матчасть.