名前空間
変種
操作

std::reverse_iterator

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

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

                           typename std::iterator_traits<Iterator>::reference >
(C++17以前)
template< class Iterator >
class reverse_iterator;
(C++17およびそれ以降)

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

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

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

range-rbegin-rend.svg

目次

[編集] メンバ型

メンバ型 定義
value_type std::iterator_traits<Iterator>::value_type
difference_type std::iterator_traits<Iterator>::difference_type
pointer std::iterator_traits<Iterator>::pointer
reference std::iterator_traits<Iterator>::reference
iterator_category std::iterator_traits<Iterator>::iterator_category

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

(C++17以前)
メンバ型 定義
iterator_type Iterator

[編集] メンバ関数

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

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

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

[編集] 非メンバ関数

引数から推定した型の std::reverse_iterator を作成します
(関数テンプレート) [edit]
ベースとなるイテレータを比較します
(関数テンプレート) [edit]
イテレータを進めます
(関数テンプレート) [edit]
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'; // replaces 'o' with 'O' 
    r += 7; // iterator now points at 'O'
    std::string rev(r, s.rend());
    std::cout << rev << '\n';
}

出力:

OlleH

[編集] 関連項目

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