C++ 概念: ForwardIterator
来自cppreference.com
向前迭代器 (ForwardIterator
) 是一种能从所指向元素读取数据的迭代器 (Iterator
) 。
不同于输入迭代器 (InputIterator
) 和输出迭代器 (OutputIterator
) ,它能被用于多趟算法。
目录 |
[编辑] 要求
若达成下列条件,则类型 It
满足向前迭代器 (ForwardIterator
)
- 类型
It
满足输入迭代器 (InputIterator
) - 类型
It
满足可默认构造 (DefaultConstructible
) - 类型
It
的对象提供后述的多趟保证 - 类型
std::iterator_traits<It>::reference
必须恰为
- 若
It
满足输出迭代器 (OutputIterator
) (It
可变)则为T&
- 否则为
const T&
(It
为常),
- 若
- (其中
T
是 std::iterator_traits<It>::value_type 所指代的类型)
- 在同一底层序列上的所有迭代器和值初始化迭代器 (C++14 起)中定义等于和不等于比较。
而且,给定
-
i
,类型It
的可解引用迭代器 -
reference
,std::iterator_traits<It>::reference
所指代的类型
则下列表达式必须合法且拥有其指定的效应
表达式 | 返回类型 | 等价表达式 | 注意 |
---|---|---|---|
i++ | It | It ip=i; ++i; return ip; | |
*i++ | reference |
一个可变向前迭代器 (ForwardIterator
) 是一个额外满足输出迭代器 (OutputIterator
) 要求的向前迭代器 (ForwardIterator
) 。
[编辑] 多趟保证
给定 a
和 b
,类型 It
的可解引用迭代器
- 若
a
与b
比较相等(a == b
可语境转换到true
),则要么都是不可解引用,要么*a
与*b
是绑定到同一对象的引用 - 通过可变
ForwardIterator
迭代器赋值不能非法化该迭代器(隐含地因为reference
定义为真引用) - 自增
a
的副本不改变从a
读取的值(正式而言,要么It
是无修饰指针类型,要么表达式 (void)++It(a), *a 等价于表达式 *a ) -
a == b
隐含++a == ++b
孤立迭代器一个值初始化的向前迭代器 (ForwardIterator ) 表现类似某些未指定空容器的尾后迭代器:它与所有值初始化的同类型向前迭代器 (ForwardIterator ) 比较相等。 |
(C++14 起) |
[编辑] 参阅
指定输入迭代器 (InputIterator ) 为向前迭代器,支持相等比较和多趟 (概念) |