迭代器

STL 结构进行广泛使用迭代器干预在这些操作的各种算法和顺序中。 迭代器类型 (或其标题) 的名称指示该类型所需的迭代器类。 遵循增加的幂的序列,类别摘要此处如下所示:

  • 输出。 输出迭代器 X 只能有一个值 V 存储的间接该关系图后,在后, 必须 在下存储区之前增大,为 (*XC++ = V), (*X = V, C++X),或者 (*X = V, X++)。

  • 输入。 输入迭代器 X 可以表示指示序列的结尾的一个奇异值。 如果输入迭代器与其结束顺序值不相等,它可以具有值 V 捕获的间接此任意多次,为 (V = *X)。 若要继续到序列中的下一个值或末尾,添加它,请在 C++X, XC++ 或 (V = *X++)。 一旦添加输入迭代器的所有副本,其他副本都不能进行比较,安全取消引用或此后增加。

  • 转发。 仅向前迭代器 X 能取代编写的自输出迭代器或输入迭代器阅读。 可以,但是,读取 (通过 V = *X) 要通过仅向前迭代器编写 (通过 *X = V)。 还可以生成多个副本仅向前迭代器,每个可以独立地取消引用并提高。

  • 双向。 一双向迭代器 X 能取代仅向前迭代器。 可以,不过,还减双向迭代器,为--X, X--或 (V = *X--)。

  • 随机访问。 一个随机访问迭代器 X 能取代一双向迭代器。 您还可以在一个随机访问迭代器相同的整数算术在对象指针可。 对于 N,整数对象,您可以编写 x[]N, x + N, x -N和 N + X。

请注意对象指针可能取代一个随机访问迭代器或其他迭代器。 所有迭代器可分配或复制。 这些假定为轻量对象和通常通过,并且返回值,而不是引用。 还请注意前面所述的操作都在一个有效的迭代器无法引发异常,在执行。

迭代器类层次结构可以通过显示三个序列的摘要。 对于序列的只读访问,则可以使用任何:

output iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

右箭头表示 “进行替换”。要求输出迭代器的所有算法应恰好使用仅向前迭代器,例如,但是, 不是 另一种方法一起使用。

对于序列的只读访问,可以使用任何:

input iterator
   -> forward iterator
   -> bidirectional iterator
   -> random-access iterator

输入迭代器最弱的任何类别,在本例中。

最后,为序列的读/写访问权,可以使用任何:

forward iterator
   -> bidirectional iterator
   -> random-access iterator

对象指针可能始终充当一个随机访问迭代器,因此,它可以充当迭代器任何类别,如果它支持它指定为序列的适当的读/写访问权。

除了对象指针之外的某个迭代 Iterator 还必须定义专用化所需的成员类型 iterator_traits<Iterator>。 注意到这些要求可以通过派生 Iterator 与来自公共基类 迭代器

此 “代数”迭代器对实际上所有其他内容是基本在标准模板库中。 了解每个迭代类别的承诺和限制查看重要的容器和算法如何使用迭代器在 STL。

备注

还可以使用 对于每个, 重复在 STL 集合。有关更多信息,请参见 如何:循环访问与的每个的 STL 集合

Visual C++ 现在提供用于检查的迭代器和调试迭代器确保不会复盖容器的区域。 有关更多信息,请参见经过检查的迭代器调试迭代器支持

请参见

参考

标准模板库

线程安全性对标准C++库中