迭代器的类型:输出与输入与前向与随机访问迭代器

Naw*_*waz 38 c++ iterator stl

C++ STL中有多少种类型的迭代器?截至目前,我知道这些:

  • 输出迭代器
  • 输入迭代器
  • 转发迭代器
  • 随机访问迭代器

还有更多吗?它们之间有什么区别?每个的限制和特征是什么?使用哪种类型?

zku*_*nov 39

如果可以,请查找并阅读"The C++ Standard Library:A Tutorial and Reference".本书包含有关STL迭代器的整章.

这是书中的一些内容:

Iterator Category  Ability                          Providers
-----------------  -------------------------------  ----------------------------
Input iterator     Reads forward                    istream
Output iterator    Writes forward                   ostream, inserter
Forward iterator   Reads/writes forward             forward_list,
                                                      unordered_[multi]set,
                                                      unordered_[multi]map
Bidirectional it.  Reads/writes forward/backward    list, [multi]set, [multi]map
Random access it.  Reads/writes with random access  vector, deque string, array 
Run Code Online (Sandbox Code Playgroud)

  • @Jules这是怎么过时的?由于在C++ 11中没有引入新的迭代器,并且旧迭代器的行为没有改变,我认为它非常准确.哪些容器支持哪些迭代器与问题无关. (3认同)
  • 现在已经过时了,因为它缺少 C++11 的信息,但唯一相关的变化是现在有提供前向迭代器的容器:`forward_list`、`unordered_set`、`unordered_multiset`、`unordered_map` 和`unordered_multimap`。 (2认同)

Fre*_*Foo 15

C++标准还有一个双向迭代器概念,它是一个前向迭代器,也可以向后(带operator--).这五个一起构成了C++标准第24.2节中的整个迭代器层次结构.

旧的STL也有一个简单的迭代器的概念.有关各种迭代器的详细信息,请参阅其迭代器概述.

提升设计师Abrahams,Siek和Witt 提出了一系列更精细的迭代器概念.


dav*_*vka 6

我怀疑你很清楚答案,但无论如何,这些图表对于解决这个问题非常有帮助