Я знаю, что этот пост слишком старый, но только потому, что у меня были те же "проблемы", и Google привел меня сюда, я добавлю свои два цента, вот что я нашел:
По крайней мере, в C ++В библиотеке есть много типов итераторов, каждый из которых объявляет некоторую связанную семантику.Типы:
- Итераторы ввода
- Прямые итераторы
- Двунаправленные итераторы
- Итераторы произвольного доступа
- Итераторы вывода
В вашем проблемном случае подходит семантика входных итераторов.В частности, во входных итераторах operator*()
не нужно возвращать ссылку на объект, он может даже возвращать вновь созданный объект.Таким образом, избегая наличия «фиктивного» объекта внутри объекта итератора, как предложил Бьорн.
Здесь вы можете посмотреть больше .