input_iterator_tag与forward_iterator_tag的不同之处是什么?

Bas*_*evs 6 stl

std :: input_iterator_tag如何与std :: forward_iterator_tag不同?

受到关于C++迭代器的SO答案的启发.在相同的情况下,两个标签似乎都是合适的.

Mar*_*rer 7

  1. 您可以通过前向迭代器设置值. *iter = foo;输出迭代器中是合法的,但不是输入迭代器,而前向迭代器可以读写,除非它是不可变的.

    const SinglelyLinkedList myList = foo();
    // a const container should return immutable iterators
    SomeIterTypedef immutableIter = myList.begin();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 输入迭代器可以包装函数的输出.前向迭代器"可用于多遍算法".除非底层容器发生变化,否则前向迭代器的两个副本应产生相同的结果.输入迭代器甚至不必与容器相关联...例如istream_iterator.

我从SGI迭代器页面和特定的输入,输出和转发迭代器页面中提取了所有这些内容.