C++ の名前付き要件: ReversibleContainer
From cppreference.com
ReversibleContainer は、LegacyBidirectionalIterator または LegacyRandomAccessIterator のいずれかの要件を満たすイテレータを持つ Container です。このようなイテレータにより、ReversibleContainer を逆順にイテレートできます。
目次 |
[編集] 要件
ある型が ReversibleContainer を満たすのは、それが Container を満たし、そのイテレータ型が双方向またはランダムアクセスのイテレータカテゴリに属し、以下の型と値が与えられた場合に、以下の表のセマンティック要件と計算量要件が満たされる場合です。
| 型 | 定義 |
X
|
ReversibleContainer 型 |
T
|
X の value_type |
| 値 | 定義 |
| a | 型 X の値 |
[編集] 型
| 名前 | 型 | 要件 |
|---|---|---|
| typename X::reverse_iterator | std::reverse_iterator<X::iterator> | 値型が T であるイテレータ型 |
| typename X::const_reverse_iterator | std::reverse_iterator<X::const_iterator> | 値型が T である定数イテレータ型 |
[編集] 式
以下の表の reverse_iterator および const_reverse_iterator の型は、それぞれ typename X::reverse_iterator および typename X::const_reverse_iterator を表します。
| Expression | 型 | セマンティクス | 計算量 |
|---|---|---|---|
| a.rbegin() | reverse_iterator定数 a の const_reverse_iterator |
reverse_iterator(a.end()) | Constant |
| a.rend() | reverse_iterator定数 a の const_reverse_iterator |
reverse_iterator(a.begin()) | Constant |
| a.crbegin() | const_reverse_iterator
|
const_cast<const X&>(a).rbegin() | Constant |
| a.crend() | const_reverse_iterator
|
const_cast<const X&>(a).rend() | Constant |
[編集] ライブラリ型
以下の標準ライブラリ型は ReversibleContainer の要件を満たします。
| (C++11) |
固定サイズのインプレースな連続配列 (クラステンプレート) |
| 両端キュー (クラステンプレート) | |
| 双方向リンクリスト (クラステンプレート) | |
| リサイズ可能な連続配列 (クラステンプレート) | |
| (C++26) |
リサイズ可能、固定容量、インプレースの連続配列 (クラステンプレート) |
| キーでソートされたキーと値のペアのコレクション、キーは一意 (クラステンプレート) | |
| キーによってソートされたキーと値のペアのコレクション (クラステンプレート) | |
| ユニークなキーのコレクション、キーによってソートされる (class template) | |
| キーによってソートされたキーのコレクション (クラステンプレート) |
[編集] 例
以下の例は、vector (これはレガシーなランダムアクセスイテレータを持ちます) を逆順にイテレートします。
このコードを実行
#include <iostream> #include <vector> int main() { std::vector<int> v = {3, 1, 4, 1, 5, 9}; for (std::vector<int>::const_reverse_iterator i{v.crbegin()}; i != v.crend(); ++i) std::cout << *i << ' '; std::cout << '\n'; }
出力
9 5 1 4 1 3
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2105 | C++98 | typename X::const_reverse_iterator は 値型 const T のイテレータ型であること |
定数であること 値型 T のイテレータ型であること |