- iterator[meta header]
- std[meta namespace]
- reverse_iterator[meta class]
- function[meta id-type]
reverse_iterator(); // (1) C++98
constexpr reverse_iterator(); // (1) C++17
explicit reverse_iterator(Iterator x); // (2) C++98
constexpr explicit reverse_iterator(Iterator x); // (2) C++17
template <class U>
reverse_iterator(const reverse_iterator<U>& u); // (3) C++98
template <class U>
constexpr reverse_iterator(const reverse_iterator<U>& u); // (3) C++17reverse_iteratorオブジェクトを構築する。
- (1) : デフォルトコンストラクタ。内包する元となるイテレータである
currentメンバ変数を初期化する。- C++98 :
currentをデフォルト初期化する - C++11 :
currentを値初期化する。このイテレータに対する操作は、値初期化されたIterator型のイテレータに対して対応する操作が定義されている場合にのみ、定義された動作をする
- C++98 :
- (2) : 元となるイテレータ
xを受け取り、メンバ変数currentに保持する。 - (3) :
u.currentをメンバ変数currentに保持する。
- C++17まで
- (3) :
UがIteratorに変換可能であること
- (3) :
- C++20
- (3) : 次の両方を満たす
is_same_v<U, Iterator> == falseであること。const U&, Iteratorがconvertible_to<Iterator>のモデルとなること。
- (3) : 次の両方を満たす
- (3) :
UがIteratorに変換可能であること
#include <iostream>
#include <vector>
#include <iterator>
int main()
{
std::vector<int> v = {1, 2, 3};
std::reverse_iterator<decltype(v)::iterator> it1(v.end()); // 元となるイテレータで初期化
std::reverse_iterator<decltype(v)::const_iterator> it2 = it1; // イテレータの変換
std::reverse_iterator<decltype(v)::const_iterator> end(v.begin());
for (; it2 != end; ++it2) {
std::cout << *it2 << std::endl;
}
}3
2
1
- P0031R0 A Proposal to Add Constexpr Modifiers to
reverse_iterator,move_iterator,arrayand Range Access - LWG Issue 1012.
reverse_iteratordefault ctor should value initialize- C++11で、デフォルトコンストラクタの効果が、内包するイテレータのデフォルト初期化から値初期化へ改められた
- LWG Issue 3435.
three_way_comparable_with<reverse_iterator<int*>, reverse_iterator<const int*>>