名前空間
変種
操作

std::reverse_iterator

提供: cppreference.com
< cpp‎ | iterator
 
 
イテレータライブラリ
イテレータコンセプト
イテレータプリミティブ
イテレータアダプタ
ストリームイテレータ
イテレータのカスタマイゼーションポイント
イテレータ操作
(C++11)
(C++11)
範囲アクセス
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
 
ヘッダ <iterator> で定義
template< class Iter >

class reverse_iterator : public std::iterator<
                           typename std::iterator_traits<Iter>::iterator_category,
                           typename std::iterator_traits<Iter>::value_type,
                           typename std::iterator_traits<Iter>::difference_type,
                           typename std::iterator_traits<Iter>::pointer,

                           typename std::iterator_traits<Iter>::reference >
(C++17未満)
template< class Iter >
class reverse_iterator;
(C++17以上)

std::reverse_iterator は指定されたイテレータの方向を反転させるイテレータアダプタです。 別の言い方をすると、双方向イテレータに対して使用したとき、 std::reverse_iterator は、ベースとなる双方向イテレータによって定義されるシーケンスの、終端から先頭へと移動する新しいイテレータを生成します。

イテレータ i から構築された逆イテレータ r について、関係 &*r == &*(i-1) が常に成り立ちます (r が逆参照可能である限り)。 そのため、終端イテレータから構築された逆イテレータは、シーケンスの最後の要素を逆参照します。

これは標準ライブラリのコンテナのメンバ関数 rbegin() および rend() によって返されるイテレータです。

range-rbegin-rend.svg

目次

[編集] メンバ型

メンバ型 定義
iterator_type Iter
iterator_concept
(C++20以上)
Iterstd::random_access_iterator をモデル化する場合は std::random_access_iterator_tag、そうでなければ std::bidirectional_iterator_tag
iterator_category

std::iterator_traits<Iter>::iterator_category

(C++20未満)

std::iterator_traits<Iter>::iterator_categorystd::derived_from<std::random_access_iterator_tag> をモデル化する場合は std::random_access_iterator_tag、そうでなければ無変更の std::iterator_traits<Iter>::iterator_category

(C++20以上)
value_type

std::iterator_traits<Iter>::value_type

(C++20未満)

std::iter_value_t<Iter>

(C++20以上)
difference_type

std::iterator_traits<Iter>::difference_type

(C++20未満)

std::iter_difference_t<Iter>

(C++20以上)
pointer std::iterator_traits<Iter>::pointer
reference

std::iterator_traits<Iter>::reference

(C++20未満)

std::iter_reference_t<Iter>

(C++20以上)

メンバ型 iterator_categoryvalue_typedifference_typepointer および referencestd::iterator<std::iterator_traits<Iter>::iterator_category
, std::iterator_traits<Iter>::value_type
, std::iterator_traits<Iter>::difference_type
, std::iterator_traits<Iter>::pointer
, std::iterator_traits<Iter>::reference
>
から継承することによって取得することが要求されます。

(C++17未満)

[編集] メンバ関数

新しいイテレータアダプタを構築します
(パブリックメンバ関数) [edit]
別のイテレータを代入します
(パブリックメンバ関数) [edit]
ベースとなるイテレータにアクセスします
(パブリックメンバ関数) [edit]
イテレータの指す先の要素にアクセスします
(パブリックメンバ関数) [edit]
インデックスによって要素にアクセスします
(パブリックメンバ関数) [edit]
イテレータをインクリメントもしくはデクリメントします
(パブリックメンバ関数) [edit]

[編集] メンバオブジェクト

メンバ名 定義
current (protected) base() イテレータのコピー

[編集] 非メンバ関数

引数から推定した型の std::reverse_iterator を作成します
(関数テンプレート) [edit]
ベースとなるイテレータを比較します
(関数テンプレート) [edit]
イテレータを進めます
(関数テンプレート) [edit]
2つのイテレータアダプタ間の距離を計算します
(関数テンプレート) [edit]
(C++20)
調節されたベースとなるイテレータを逆参照した結果をその関連する右辺値参照型にキャストします
(関数テンプレート) [edit]
(C++20)
2つの調節されたベースとなるイテレータの指す先のオブジェクトを入れ替えます
(関数テンプレート) [edit]

[編集] ノート

std::reverse_iterator はメンバオブジェクトへの参照を返すイテレータ (いわゆる "stashing iterator") に対しては動作しません。 stashing iterator の例は std::filesystem::path::iterator です。

[編集]

#include <iostream>
#include <string>
#include <iterator>
 
int main()
{
    std::string s = "Hello, world";
    std::reverse_iterator<std::string::iterator> r = s.rbegin();
    r[7] = 'O'; // 'o' を 'O' に置き換えます。 
    r += 7; // イテレータは 'O' を指します。
    std::string rev(r, s.rend());
    std::cout << rev << '\n';
}

出力:

OlleH

[編集] 関連項目

(C++17で非推奨)
シンプルなイテレータのための型要件の定義を簡単にする基底クラス
(クラステンプレート) [edit]