std::ranges::iota_view<W, Bound>::iterator
|   struct /*iterator*/;  | 
(1) | (C++20 起) | 
|   辅助别名模板  | 
||
|   template< class I > using /*iota-diff-t*/ = /* see below */; // 仅用于阐释  | 
(2) | (C++20 起) | 
|   辅助概念  | 
||
|   template< class I > concept /*decrementable*/ =               // 仅用于阐释  | 
(3) | (C++20 起) | 
|   template< class I > concept /*advanceable*/ =                 // 仅用于阐释  | 
(4) | (C++20 起) | 
iota-diff-t 计算迭代器类型和整数式类型的差类型。
-  若 
W不是整数类型,或若它是整数类型且 sizeof(std::iter_difference_t<I>) 大于 sizeof(I) ,则 /*iota-diff-t*/<I> 为 std::iter_difference_t<I> 。 -  否则,若 /*iota-diff-t*/<I> 宽度大于 
I的有符号整数类型,若这种类型存在。 -  否则, 
I是最宽的整数类型之一,而 /*iota-diff-t*/<I> 是宽度不小于I的未指明的有符号整数式类型。此情况下不指定 /*iota-diff-t*/<I> 是否实现weakly_incrementable。 
advanceable 指定类型为 decrementable 及 totally_ordered ,而且该类型与其差类型间的 operator+=、 operator-=、 operator+ 和 operator- 均拥有通常含义。语义要求
I 实现 decrementable ,仅若 I 满足 decrementable 且所有其所蕴含的概念均得到实现,并且给定相等的 I 类型对象 a 与 b :
-  若 
a与b在前与后 operator-- 的定义域内(即它们可自减),则以下均为 true :- std::addressof(--a) == std::addressof(a)、
 - bool(a-- == b)、
 - bool(((void)a--, a) == --b)、
 - bool(++(--a) == b) 。
 
 -  若 
a与b在前与后 operator++ 的定义域内(即它们可自增),则 bool(--(++a) == b) 为 true 。 
D 代表 /*iota-diff-t*/<I> 。类型 I 实现 advanceable 仅若 I 满足 advanceable 且所有其所蕴含均得到实现,并且给定
-  
I类型对象a与b及 -  
D类型值n, 
使得 b 可在 n 次应用 ++a 后从 a 可达,下列所有条件都得到满足:
-  (a += n) 等于 
b。 - std::addressof(a += n) 等于 std::addressof(a) 。
 - I(a + n) 等于 (a += n) 。
 -  对于二个 
D类型正值x与y,若 I(a + D(x + y)) 为良定义,则 I(a + D(x + y)) 等于 I(I(a + x) + y) 。 -  I(a + D(0)) 等于 
a。 - 若 I(a + D(n - 1)) 为良定义,则 I(a + n) 等于 [](I c) { return ++c; }(I(a + D(n - 1))) 。
 -  (b += -n) 等于 
a。 -  (b -= n) 等于 
a。 - std::addressof(b -= n) 等于 std::addressof(b) 。
 - I(b - n) 等于 (b -= n) 。
 -  D(b - a) 等于 
n。 - D(a - b) 等于 D(-n) 。
 - bool(a <= b) 为 true 。
 
成员类型
| 成员类型 | 定义 | 
  iterator_concept
 | 
  若 W 实现 advanceable 则为 std::random_access_iterator_tag 。否则若 W 实现 decrementable 则为 std::bidirectional_iterator_tag 。否则若 W 实现 incrementable 则为 std::forward_iterator_tag 。否则为 std::input_iterator_tag 。  | 
  iterator_category
 | 
  若 W 实现 incrementable 则为 std::input_iterator_tag 。否则无成员类型 iterator_category 。
 | 
  value_type
 | 
  W
 | 
  difference_type
 | 
/*iota-diff-t*/<W> | 
注意: /*iterator*/ 是
-  
random_access_iterator,若 W 实现advanceable, -  
bidirectional_iterator,若 W 实现decrementable, -  
forward_iterator,若 W 实现incrementable, -  否则为 
input_iterator。 
然而,若 W 实现 incrementable 则它仅满足老式输入迭代器 (LegacyInputIterator) ,否则不满足老式输入迭代器 (LegacyInputIterator) 。
数据成员
此迭代器类型的典型实现仅保有一个 W 类型的数据成员(此处示为 value_ ):用于解引用的值。
成员函数
std::ranges::iota_view::iterator::iterator
|   /*iterator*/() requires std::default_initializable<W> = default;  | 
(1) | (C++20 起) | 
|   constexpr explicit /*iterator*/( W value );  | 
(2) | (C++20 起) | 
value_ 。value 初始化仅用于阐释的数据成员 value_ 。此值将由 operator* 返回,并为 operator++ 所自增。
std::ranges::iota_view::iterator::operator*
|   constexpr W operator*() const noexcept(std::is_nothrow_copy_constructible_v<W>);  | 
(C++20 起) | |
按值返回当前值(换言之,这是只读视图)。
std::ranges::iota_view::iterator::operator++
|   constexpr /*iterator*/& operator++()  | 
(1) | (C++20 起) | 
|   constexpr void operator++(int)  | 
(2) | (C++20 起) | 
|   constexpr /*iterator*/ operator++(int) requires std::incrementable<W>;  | 
(3) | (C++20 起) | 
std::ranges::iota_view::iterator::operator--
|   constexpr /*iterator*/& operator--() requires /*decrementable*/<W>;  | 
(1) | (C++20 起) | 
|   constexpr /*iterator*/operator--(int) requires /*decrementable*/<W>;  | 
(2) | (C++20 起) | 
std::ranges::iota_view::iterator::operator+=
|   constexpr /*iterator*/& operator+=( difference_type n ) requires /*advanceable*/<W>;  | 
(C++20 起) | |
若 W 为无符号整式,则在 n 非负时进行 value_ += static_cast<W>(n) ,否则进行 value -= static_cast<W>(-n) ,然后返回 *this 。
否则等价于 value_ += n; return *this; 。
std::ranges::iota_view::iterator::operator-=
|   constexpr /*iterator*/& operator-=( difference_type n ) requires /*advanceable*/<W>;  | 
(C++20 起) | |
若 W 为无符号整式,则在 n 非负时进行 value_ -= static_cast<W>(n) ,否则进行 value += static_cast<W>(-n) ,然后返回 *this 。
否则等价于 value_ -= n; return *this; 。
std::ranges::iota_view::iterator::operator[]
|   constexpr W operator[]( difference_type n ) const requires /*advanceable*/<W>;  | 
(C++20 起) | |
等价于 return W(value_ + n); 。
非成员函数
operator==, <, >, <=, >=, <=>(std::ranges::iota_view::iterator)
|   friend constexpr bool operator== (const /*iterator*/& x, const /*iterator*/& y) requires std::equality_comparable<W>;  | 
(1) | (C++20 起) | 
|   friend constexpr bool operator<  (const /*iterator*/& x, const /*iterator*/& y) requires std::totally_ordered<W>;  | 
(2) | (C++20 起) | 
|   friend constexpr bool operator>  (const /*iterator*/& x, const /*iterator*/& y) requires std::totally_ordered<W>;  | 
(3) | (C++20 起) | 
|   friend constexpr bool operator<= (const /*iterator*/& x, const /*iterator*/& y) requires std::totally_ordered<W>;  | 
(4) | (C++20 起) | 
|   friend constexpr bool operator>= (const /*iterator*/& x, const /*iterator*/& y) requires std::totally_ordered<W>;  | 
(5) | (C++20 起) | 
|   friend constexpr bool operator<=>(const /*iterator*/& x, const /*iterator*/& y) requires std::totally_ordered<W> && std::three_way_comparable<W>;  | 
(6) | (C++20 起) | 
!= 运算符从 == 运算符合成。
operator+(std::ranges::iota_view::iterator)
|   friend constexpr /*iterator*/ operator+( /*iterator*/ i, difference_type n ) requires /*advanceable*/<W>;  | 
(1) | (C++20 起) | 
|   friend constexpr /*iterator*/ operator+( difference_type n, /*iterator*/ i ) requires /*advanceable*/<W>;  | 
(2) | (C++20 起) | 
等价于 i += n; return i; 。
operator-(std::ranges::iota_view::iterator)
|   friend constexpr /*iterator*/ operator-( /*iterator*/ i, difference_type n ) requires /*advanceable*/<W>;  | 
(1) | (C++20 起) | 
|   friend constexpr difference_type operator-( const /*iterator*/& x,                                             const /*iterator*/& y )  | 
(2) | (C++20 起) | 
D 为 difference_type 。
-  若 
W为有符号整数式,等价于 return D(D(x.value_) - D(y.value_)); 。 -  否则若 
W为无符号整数式,等价于 return y.value_ > x.value_ ? D(-D(y.value_ - x.value_)) : D(x.value_ - y.value_); 。 - 否则等价于 return x.value_ - y.value_; 。
 
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 | 
|---|---|---|---|
| P2259R1 | C++20 |  始终定义成员 iterator_category
 | 
 仅若 W 满足 incrementable 才定义
 | 
| LWG 3580 | C++20 |  operator+ 与 operator- 复制迭代器
 | 
使之移动迭代器 |