C++ named requirements: LegacyIterator
LegacyIterator 要件は、コンテナの要素を識別および走査するために使用できる型を記述します。
LegacyIterator は、他のイテレータ型によって使用される基本要件セットです: LegacyInputIterator 、 LegacyOutputIterator 、 LegacyForwardIterator 、 LegacyBidirectionalIterator 、および LegacyRandomAccessIterator 。イテレータはポインタの抽象化として考えることができます。
イテレータの全カテゴリは、そのカテゴリに対して償却定数時間で実現可能な関数のみを要求します。したがって、イテレータの要件表 およびコンセプト定義 (C++20以降) は計算量を規定しません。
目次 |
要件
型
It
は、以下の条件を満たす場合に
LegacyIterator
を満たす
-
型
Itは CopyConstructible を満たし、かつ -
型
Itは CopyAssignable を満たし、かつ -
型
Itは Destructible を満たし、かつ -
型
Itは Swappable を満たし、かつ -
std::
iterator_traits
<
It
>
は以下のメンバー型定義を持つ:
value_type, (C++20以前)difference_type,reference,pointer, およびiterator_category、かつ -
r
(型
Itの左辺値)が与えられたとき、以下の式は有効であり、指定された効果を持たなければならない:
| 式 | 戻り値の型 | 事前条件 |
|---|---|---|
| * r | 未規定 | r は 間接参照可能 |
| ++ r | It & | r は インクリメント可能 (式 ++ r の動作が定義されている) |
Conceptstd::iterator_traits の定義のために、以下の説明専用コンセプトが定義される。
ここで、説明専用コンセプト
__Referenceable
<
T
>
は、
T
&
が有効な型である場合にのみ満たされる(特に、
|
(C++20以降) |
注記
用語に関する注意:以下の表は、このサイトで使用されている名称と対応するC++標準の名称(同じ意味を持つ)を示しています。 「Legacy」(および「Cpp17」)接頭辞は、C++20以前の標準との互換性を強調し、これらの要件をC++20で導入された新しい iterator concepts と区別するために使用されます。
- ↑ LegacyContiguousIterator カテゴリはC++17で初めて正式に規定されたが、 std::vector 、 std::basic_string 、 std::array 、および std::valarray のイテレータ、ならびにC配列へのポインタは、C++17以前のコードではしばしば別個のカテゴリとして扱われていた。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2437 | C++98 |
*
r
は
reference
であることが要求される
|
出力イテレータでは要求されない |
| LWG 3420 | C++20 |
説明専用コンセプトは最初に
copyable
をチェックする
|
copyable
はrequires式がtrueを返す場合にのみチェックされる
|
関連項目
|
(C++20)
|
型のオブジェクトがインクリメントおよびデリファレンス可能であることを指定する
(コンセプト) |
| Iterator library | イテレータ、イテレータ特性、アダプタ、およびユーティリティ関数の定義を提供する |