命名空间
变体
操作

std::experimental::ranges::ForwardIterator

来自 cppreference.cn
< cpp‎ | experimental‎ | ranges
 
 
实验性
技术规范
文件系统库 (filesystem TS)
库基础 (library fundamentals TS)
库基础 2 (library fundamentals TS v2)
库基础 3 (library fundamentals TS v3)
并行扩展 (parallelism TS)
并行扩展 2 (parallelism TS v2)
并发扩展 (concurrency TS)
并发扩展 2 (concurrency TS v2)
概念 (concepts TS)
范围 (ranges TS)
反射 (reflection TS)
数学特殊函数 (special functions TR)
实验性非TS
模式匹配
线性代数
std::execution
契约
2D图形
 
 
迭代器库
迭代器概念
间接可调用概念
                                                  
                                                  
                                                  
常用算法要求
                                                  
概念工具
迭代器工具和操作
迭代器 traits
迭代器适配器
流迭代器
 
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 细化了 InputIterator,增加了相等比较和多趟保证。

前向迭代器的 == 域是同一底层序列上的迭代器,但相同类型的Value-initialized迭代器可以相互比较,并且应比较相等。

从前向迭代器获得的指向范围 [i, s) 的指针和引用,只要 [i, s) 继续表示一个范围,就必须保持有效。

设 a 和 b 是类型 I 的两个可解引用迭代器。仅当满足以下条件时,ForwardIterator 才满足:

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

这被称为多趟保证。

[编辑] 注释

前向迭代器不能是“stashing”(暂存):它不能返回对其自身内部对象的引用,因为这种引用会因前向迭代器的销毁而失效。