Эта концепция представляет собой уточнение Input Iterator, добавляя требования, что итератор может использоваться для выполнения нескольких проходов через диапазон, и что если it1 == it2 и it1 является приемлемым, то ++it1 == ++it2. Многопропускной итератор очень похож на передний итератор . Разница лишь в том, что для итератора Forward требуется, чтобы тип reference был value_type&, тогда как MultiPassInputIterator похож на Input Iterator в том, что reference Тип должен быть конвертируемым в value_type.
Design Notes
комментарии Валентина Боннара:
Я думаю, что введение многоканального итератора ввода не является правильным решением. Вы также хотите определить Multi-Pass Bidirectionnal Iterator и Multi-Pass Random Access Iterator? Нет, конечно. Это только запутывает вопрос. Проблема кроется в существующей иерархии итераторов, которая смешивает изменчивость, модифицируемость и ценность, и они явно являются независимыми.
Термины Forward, Bidirectionnal и Random Access относятся к мовабилити и не должны использоваться для обозначения чего-либо еще. Полностью ортогональным способом итераторы могут быть неизменяемыми, мутируемыми или ни тем, ни другим. Ценность итераторов также ортогональна с иммутабиллией. С этими чистыми концепциями ваш многоканальный итератор ввода называется просто передовым итератором.
Обратите внимание, что на практике единственная операция, не разрешенная на моем переднем итераторе, разрешена на стенде: Forward Iterator &*it. Я думаю, что &* редко требуется в общем коде.
ответ Джереми Сика:
Вышеприведенный анализ Валентина является правильным. Конечно, существует проблема обратной совместимости. Текущие реализации STL основаны на старом определении Forward Iterator. Правильный курс действий заключается в изменении Forward Iterator и т.д. в стандарте C++. Как только это будет сделано, мы можем выбросить многоканальный итератор ввода.
Статья MultiPassInputIterator раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.