Namespaces
Variants

C++ named requirements: ReversibleContainer

From cppreference.net
C++ named requirements

ReversibleContainer は、 Container であり、 LegacyBidirectionalIterator または LegacyRandomAccessIterator の要件を満たすイテレータを持つものです。このようなイテレータにより、 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 を表します。

セマンティクス 計算量
a. rbegin ( ) reverse_iterator
const_reverse_iterator (定数オブジェクトの場合)
reverse_iterator ( a. end ( ) ) 定数時間
a. rend ( ) reverse_iterator
const_reverse_iterator (定数オブジェクトの場合)
reverse_iterator ( a. begin ( ) ) 定数時間
a. crbegin ( ) const_reverse_iterator const_cast < const X & > ( a ) . rbegin ( ) 定数時間
a. crend ( ) const_reverse_iterator const_cast < const X & > ( a ) . rend ( ) 定数時間

ライブラリ型

以下の標準ライブラリ型は ReversibleContainer 要件を満たします:

(C++11)
固定サイズのインプレース連続配列
(クラステンプレート)
両端キュー
(クラステンプレート)
双方向リンクリスト
(クラステンプレート)
サイズ変更可能な連続配列
(クラステンプレート)
サイズ変更可能、固定容量、インプレース連続配列
(クラステンプレート)
キーと値のペアのコレクション、キーでソート、キーは一意
(クラステンプレート)
キーと値のペアのコレクション、キーでソート
(クラステンプレート)
一意のキーのコレクション、キーでソート
(クラステンプレート)
キーのコレクション、キーでソート
(クラステンプレート)

以下の例は、 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 の定数
イテレータ型であることが要求される