C++ named requirements: LegacyRandomAccessIterator
LegacyRandomAccessIterator は、任意の要素を定数時間で指すように移動可能な LegacyBidirectionalIterator です。
LegacyRandomAccessIterator
it
が
Container
に由来する場合、
it
の
value_type
はコンテナのものと同じであるため、デリファレンス(
*
it
)によってコンテナの
value_type
が取得されます。
配列の要素へのポインタは、 LegacyRandomAccessIterator のすべての要件を満たします。
目次 |
要件
型
It
は、以下の条件を満たす場合に
LegacyRandomAccessIterator
を満たします
-
型
Itは LegacyBidirectionalIterator を満たす
そして、与えられた
-
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
;
|
|
||||
|
a
+
n
n + a |
It
|
It temp
=
a
;
return temp + = n ; |
|
||||
| r - = n |
It&
|
return r + = - n ; |
n
の絶対値は
difference_type
の表現可能な値の範囲内でなければならない。
|
||||
| i - n |
それ
|
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 です。
Conceptstd::iterator_traits の定義のために、以下の説明専用コンセプトが定義される。
ここで説明専用コンセプト
|
(C++20以降) |
不具合報告
以下の動作変更欠陥報告書は、以前に公開されたC++標準に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
|
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 issue 299 はこの解決後に再オープンされました。
関連項目
|
(C++20)
|
bidirectional_iterator
がランダムアクセスイテレータであることを指定し、定数時間での前進と添字アクセスをサポートする
(コンセプト) |
| Iterator library | イテレータ、イテレータ特性、アダプタ、およびユーティリティ関数の定義を提供する |