Чем input_iterator_tag отличается от forward_iterator_tag? - PullRequest
6 голосов
/ 01 ноября 2010

Чем std :: input_iterator_tag отличается от std :: forward_iterator_tag?

Вдохновлен SO ответами об итераторах C ++.Оба тега кажутся подходящими в одних и тех же случаях.

1 Ответ

7 голосов
/ 03 ноября 2010
  1. Вы можете установить значения с помощью прямого итератора. *iter = foo; допустимо в выходном итераторе, но не во входном итераторе, тогда как прямой итератор может читать и записывать, если только он не неизменен .

    const SinglelyLinkedList myList = foo();
    // a const container should return immutable iterators
    SomeIterTypedef immutableIter = myList.begin();
    
  2. Итератор ввода может обернуть вывод функции. Прямые итераторы «могут использоваться в многопроходных алгоритмах». Две копии прямого итератора должны давать одинаковые результаты, если не изменяется базовый контейнер. Итераторы ввода даже не должны быть связаны с контейнером ... istream_iterator, например.

Я извлек все это из страницы итераторов SGI и конкретных страниц ввода, вывода и прямого итератора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...