Namespaces
Variants

std::experimental::ranges:: ForwardIterator

From cppreference.net
template < class I >

concept bool ForwardIterator =
InputIterator < I > &&
DerivedFrom < ranges :: iterator_category_t < I > , ranges :: forward_iterator_tag > &&
Incrementable < I > &&

Sentinel < I, I > ;
(ranges TS)

概念 ForwardIterator<I> 通过增加相等性比较和多趟遍历保证来细化 InputIterator

对于前向迭代器而言, == 的定义域是同一底层序列上的迭代器,但相同类型的值初始化迭代器可以相互比较且应判定为相等。

从指向范围 [ i , s ) 的前向迭代器获取的指针和引用,在 [ i , s ) 持续表示有效范围期间必须保持有效。

a b 为类型 I 的两个可解引用迭代器。仅当满足以下条件时, ForwardIterator<I> 才成立:

  • a == b 意味着 ++ a == ++ b ;且
  • 表达式 ( [ ] ( X x ) { ++ x ; } ( a ) , * a ) 等价于 * a ,即递增 a 的副本对解引用 a 的结果没有影响。

这被称为 多遍保证

注释

前向迭代器不能是“隐匿式”的:它不能返回对自身内部对象的引用,因为这类引用会因前向迭代器的销毁而失效。