SGI

平凡迭代器

类别: 迭代器 组件类型: 概念

描述

平凡迭代器是一个可以解引用以引用另一个对象的物体。不能保证支持算术运算(如递增和比较)。

细化

可赋值可等值比较可默认构造

关联类型

值类型 解引用平凡迭代器获得的值的类型

符号

X 平凡迭代器模型的类型
T 的价值类型X
x, y 类型为X
t 类型为T

定义

平凡迭代器模型的类型可以是可变的,这意味着该类型对象的引用值可以修改,也可以是常量的,这意味着它们不能修改。例如,int*是可变迭代器类型,而const int*是常量迭代器类型。如果迭代器类型是可变的,则意味着其值类型是可赋值的模型;然而,反过来不一定成立。

平凡迭代器可以具有奇异值,这意味着大多数操作的结果(包括等值比较)都是未定义的。唯一保证支持的操作是将非奇异迭代器赋值给奇异迭代器。

平凡迭代器可以具有可解引用值,这意味着解引用它会产生一个定义明确的值。可解引用迭代器始终是非奇异的,但反过来不成立。例如,空指针是非奇异的(涉及空指针的操作是定义明确的),即使它不可解引用。

使可解引用迭代器失效意味着执行一个操作,在此操作之后,迭代器可能变为不可解引用或奇异。例如,如果p是指针,那么delete p会使p.

有效的表达式

除了在可赋值可等值比较可默认构造中定义的表达式之外,以下表达式必须有效。
名称 表达式 类型要求 返回类型
默认构造函数 X x    
解引用 *x   可转换为T [1]
解引用赋值 *x = t X是可变的  
成员访问 x->m [2] T是类型,其中x.m已定义  

表达式语义

名称 表达式 先决条件 语义 后置条件
默认构造函数 X x     x是奇异的
解引用 *x x是可解引用的    
解引用赋值 *x = t x是可解引用的   *x是 t 的副本
成员访问 x->m x是可解引用的 等效于(*x).m  

复杂度保证

对平凡迭代器的操作的复杂度保证为摊销常数时间。

不变式

标识 x == y当且仅当&*x == &*y

模型

备注

[1] 的返回类型的要求*x指定为“可转换为T”,而不是简单地T,因为迭代器有时会返回某种代理对象而不是迭代器概念上指向的对象。代理对象是实现细节,而不是接口的一部分(例如,它们的一种用途是允许迭代器根据其值是正在读取还是正在写入而表现出不同的行为),因此返回代理对象的迭代器的值类型仍然是T.

[2] 定义operator->对于迭代器依赖于 C++ 语言的一部分,但尚未由所有 C++ 编译器实现。如果您的编译器尚未支持此功能,则解决方法是使用(*it).m而不是it->m.

另请参见

输入迭代器输出迭代器前向迭代器双向迭代器随机访问迭代器迭代器概述
[Silicon Surf] [STL Home]
Copyright © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息