名前空間
変種
操作

C++ の名前付き要件: ReversibleContainer

From cppreference.com
 
 
C++ 名前付き要件
 

ReversibleContainer は、LegacyBidirectionalIterator または LegacyRandomAccessIterator のいずれかの要件を満たすイテレータを持つ Container です。このようなイテレータにより、ReversibleContainer を逆順にイテレートできます。

目次

[編集] 要件

ある型が ReversibleContainer を満たすのは、それが Container を満たし、そのイテレータ型が双方向またはランダムアクセスのイテレータカテゴリに属し、以下の型と値が与えられた場合に、以下の表のセマンティック要件と計算量要件が満たされる場合です。

定義
X ReversibleContainer
T Xvalue_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
定数 aconst_reverse_iterator
reverse_iterator(a.end()) Constant
a.rend() reverse_iterator
定数 aconst_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)
固定サイズのインプレースな連続配列
(クラステンプレート) [編集]
両端キュー
(クラステンプレート) [編集]
双方向リンクリスト
(クラステンプレート) [編集]
リサイズ可能な連続配列
(クラステンプレート) [編集]
リサイズ可能、固定容量、インプレースの連続配列
(クラステンプレート) [編集]
キーでソートされたキーと値のペアのコレクション、キーは一意
(クラステンプレート) [編集]
キーによってソートされたキーと値のペアのコレクション
(クラステンプレート) [編集]
ユニークなキーのコレクション、キーによってソートされる
(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 のイテレータ型であること
English 日本語 中文(简体) 中文(繁體)