Чем std :: input_iterator_tag отличается от std :: forward_iterator_tag?
Вдохновлен SO ответами об итераторах C ++.Оба тега кажутся подходящими в одних и тех же случаях.
Вы можете установить значения с помощью прямого итератора. *iter = foo; допустимо в выходном итераторе, но не во входном итераторе, тогда как прямой итератор может читать и записывать, если только он не неизменен .
*iter = foo;
const SinglelyLinkedList myList = foo(); // a const container should return immutable iterators SomeIterTypedef immutableIter = myList.begin();
Итератор ввода может обернуть вывод функции. Прямые итераторы «могут использоваться в многопроходных алгоритмах». Две копии прямого итератора должны давать одинаковые результаты, если не изменяется базовый контейнер. Итераторы ввода даже не должны быть связаны с контейнером ... istream_iterator, например.
Я извлек все это из страницы итераторов SGI и конкретных страниц ввода, вывода и прямого итератора.