C++ 具名要求:老式随机访问迭代器 (LegacyRandomAccessIterator)
来自cppreference.com
老式随机访问迭代器 (LegacyRandomAccessIterator) 是能在常数时间内移动到指向任何元素的老式双向迭代器 (LegacyBidirectionalIterator) 。
如果某个老式随机访问迭代器 (LegacyRandomAccessIterator) it 源自某个容器 (Container) ,则 it 与该容器的 value_type 相同,因此解引用 (*it) 会获得该容器的 value_type。
指向数组元素的指针满足所有老式随机访问迭代器 (LegacyRandomAccessIterator) 的要求。
要求
类型 It 满足老式随机访问迭代器 (LegacyRandomAccessIterator) ,如果
且给定
value_type,std::iterator_traits<It>::value_type所指代的类型difference_type,std::iterator_traits<It>::difference_type所指代的类型reference,std::iterator_traits<It>::reference所指代的类型i、a、b,It或const It类型的对象r,It&类型的值n,difference_type类型的整数
那么下列表达式必须合法且拥有其指定的效果:
| 表达式 | 返回类型 | 操作语义 | 注意 | ||||
|---|---|---|---|---|---|---|---|
r += n
|
It&
|
difference_type m = n; if (m >= 0) while (m--) ++r; else while (m++) --r; return r;
|
| ||||
a + n
|
It
|
It temp = a; return temp += n;
|
| ||||
r -= n |
It& |
return r += -n;
|
n 的绝对值必须在 difference_type 的可表示值范围内。
| ||||
i - n |
It |
It temp = i; return temp -= n;
|
|||||
b - a |
difference_type |
return n;(见前条件) |
前条件:
后条件:
| ||||
i[n] |
可转换到 reference |
*(i + n) |
|||||
a < b
|
|
等价于 return b - a > 0;
|
前条件:
严格全序关系:
| ||||
a > b
|
|
b < a
|
与 a < b 相反的全序关系
| ||||
a >= b
|
|
!(a < b)
|
|||||
a <= b
|
|
!(a > b)
|
上述规则隐含了老式随机访问迭代器 (LegacyRandomAccessIterator) 也实现可小于比较 (LessThanComparable) 。
可变(mutable)老式随机访问迭代器 (LegacyRandomAccessIterator) 是还额外满足老式输出迭代器 (LegacyOutputIterator) 要求的老式随机访问迭代器 (LegacyRandomAccessIterator) 。
概念为了定义 std::iterator_traits,定义了以下仅用于阐释的概念: <tbody> </tbody>
其中仅用于阐释的概念 |
(C++20 起) |
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 299 (N3066) |
C++98 | a[n] 的返回类型需要可转换到 const value_type&
|
返回类型需要可转换到 reference
|
| LWG 448 | C++98 | a[n] 的返回类型需要可转换到 value_type
|
返回类型需要可转换到 const value_type&[1]
|
| LWG 1079 | C++98 | b - a 的定义用到了 a < b,导致循环定义
|
从定义中移除 a < b
|
| LWG 2114 (P2167R3) |
C++98 | 到 bool 的按语境可转换性过于弱而无法反映实现的期待
|
加强要求 |
- ↑ 此问题解决后,LWG 问题 299 重新打开了。
参阅
(C++20) |
指定 bidirectional_iterator 为随机访问迭代器,支持常数时间内的前进和下标访问 (概念) |
| 迭代器库 | 提供迭代器的定义、迭代器表征、适配器和工具函数 |