C++ 名前付き要件: LegacyBidirectionalIterator
LegacyBidirectionalIterator は、双方向に移動できる(すなわち、インクリメントとデクリメントができる)LegacyForwardIterator です。
LegacyBidirectionalIterator it が Container から生成された場合、it の value_type はコンテナのものと同じであり、したがって間接参照(*it)はコンテナの value_type を取得します。
目次 |
[編集] 要件
型 It が LegacyBidirectionalIterator を満たすのは、次の場合です。
- 型
Itが LegacyForwardIterator を満たす。
さらに、以下が与えられたとき
- a および b、型
Itの左辺値 -
reference、std::iterator_traits<It>::reference で示される型
以下の式は有効であり、指定された効果を持たなければなりません。
| Expression | 戻り値 | 等価な式 | 注釈 |
|---|---|---|---|
| --a | It& |
事前条件
事後条件
| |
| a-- | への変換可能 const It& | It temp = a; --a; |
|
| *a-- | reference |
ミュータブルな LegacyBidirectionalIterator は、さらに LegacyOutputIterator の要件を満たす LegacyBidirectionalIterator です。
[編集] 注釈
beginイテレータはデクリメント可能ではなく、--container.begin() が評価された場合の動作は未定義です。
双方向イテレータは、デクリメント可能であるために間接参照可能である必要はありません(特に、endイテレータは間接参照可能ではありませんが、デクリメント可能です)。
コンセプトstd::iterator_traits の定義のために、以下の exposition-only コンセプトが定義されています。
ここで、説明専用コンセプト |
(C++20以降) |
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 299 (N3066) |
C++98 | *a-- の戻り値の型がT に変換可能であると |
要求されていたが、 戻り値の型が referenceに変更された[1]。 |
| LWG 383 | C++98 | --a の後で b が間接参照可能であると | 要求されていたが、代わりに a が間接参照可能であると |
| 要求されるようになった。 (N3066) |
C++98 | LWG 1212 *a-- の戻り値の型が、LegacyForwardIterator で要求される *a++ の戻り値の型と一致していなかった。 |
要求されていたが、 戻り値の型を referenceにした。 |
[編集] 関連項目
| (C++20) |
forward_iterator が、後方への移動をサポートする双方向イテレータであることを規定する(コンセプト) |
| イテレータライブラリ | イテレータ、イテレータ特性、アダプタ、およびユーティリティ関数の定義を提供します。 |