最終更新日時:
が更新

履歴 編集

class template
<iterator>

std::reverse_iterator

namespace std {
  template <class Iterator>
  class reverse_iterator
    : public iterator<typename iterator_traits<Iterator>::iterator_category,
                      typename iterator_traits<Iterator>::value_type,
                      typename iterator_traits<Iterator>::difference_type,
                      typename iterator_traits<Iterator>::pointer,
                      typename iterator_traits<Iterator>::reference>;
}

概要

reverse_iteratorは、イテレータを、逆方向に進むイテレータとしてラップするイテレータアダプタである。

endイテレータをreverse_iteratorでラップした場合、end - 1 (つまり終端要素)を指し、begin - 1のイテレータを終端値としてみなす。

要件

テンプレートパラメータIteratorは、双方向イテレータの要件を満たすこと。ランダムアクセスイテレータであることを必要とする横断操作を使用する場合は、ランダムアクセスイテレータの要件を満たすこと。

メンバ関数

名前 説明 対応バージョン
(constructor) コンストラクタ
~reverse_iterator() = default デストラクタ
operator= 代入演算子
base 元となったイテレータを取得する
operator* 間接参照演算子
operator-> メンバアクセス演算子
operator++ イテレータをインクリメントする
operator-- イテレータをデクリメントする
operator+ イテレータを進める
operator+= イテレータ自身を進める
operator- イテレータを逆に進める
operator-= イテレータ自身を逆に進める
operator[] 任意の位置にランダムアクセスする

protectedメンバ変数

変数名 対応バージョン
current Iterator

メンバ型

名前 説明 対応バージョン
iterator_type Iterator
difference_type iterator_traits<Iterator>::difference_type
pointer iterator_traits<Iterator>::pointer
value_type iterator_traits<Iterator>::value_type
iterator_category iterator_traits<Iterator>::iterator_category
reference iterator_traits<Iterator>::reference

非メンバ関数

名前 説明 対応バージョン
operator== 等値比較
operator!= 非等値比較
operator< 左辺が右辺より小さいかの判定を行う
operator<= 左辺が右辺以下かの判定を行う
operator> 左辺が右辺より大きいかの判定を行う
operator>= 左辺が右辺以上かの判定を行う
operator- 2つのreverse_iteratorの差を求める
operator+ イテレータを進める

ヘルパ関数

名前 説明 対応バージョン
make_reverse_iterator reverse_iteratorオブジェクトを作るヘルパ関数 C++14

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>

int main()
{
  std::vector<int> v = {1, 2, 3, 4, 5};

  // 逆順に走査する
  std::reverse_iterator<decltype(v)::iterator> first(v.end());
  std::reverse_iterator<decltype(v)::iterator> last(v.begin());

  std::for_each(first, last, [](int x) {
    std::cout << x << std::endl;
  });
}

出力

5
4
3
2
1

参照