迭代器

STL 结构进行广泛使用迭代器干预在其操作的算法和各序列中。 迭代器类型 (或其前缀) 的名称指示这些类型所需类别的迭代器。 按照增大的功能类别,汇总此处的顺序如下:

  • 输出。 输出 X 迭代器只能具有 V 值存储的间接寻址,还,之后 必须 在之前添加,则为中存储 (*和X= V),(*X = V,X或 C++),(*X = V,X和)。

  • 输入。 输入迭代器 X 可以表示指示序列的结尾的一个奇异值。 如果输入迭代器不比较等于其终止序列值,它可以具有值 V 间接访问的对此任意多次,如 (V =X*)。 若要继续向序列下一个值或结束,则增加它,在 C++X,X或 C++ (V =X*))。 一旦添加输入迭代器的任何副本,其他副本没有比较,可以安全移除引用或之后增加。

  • 向前迈进。 向前迭代器 X 取代的输出可以编写一迭代器或读取的输入迭代器。 可以,但是,通过读取 ( V = *)X所通过向前迭代器通过编写 (*X = V)。 还可以使多个副本向前迭代器,每一对可以单独取消引用并提高。

  • 双向。 双向迭代器在 X 中向前迭代器。 可以,但是,也它减去一双向迭代器,如--X,X--或 (V =X*--).

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

注意对象指针可以将随机访问迭代器或其他迭代器。 所有迭代器可将 PDB 或其副本。 这些假定是轻量对象和通常传递并返回值,而不是引用。 还请注意以上所述的操作都在有效的迭代器无法引发异常,在执行。

迭代器类层次结构可以通过三个序列汇总。 对于的序列只写访问权限,您可以使用其中任意一:

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 集合。有关详细信息,请参阅如何:循环访问与的每个的 STL 集合

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

请参见

参考

标准模板库

C++ 标准库中的线程安全