namespace std {
template <class C>
auto rbegin(C& c) -> decltype(c.rbegin()); // (1) C++14
template <class C>
constexpr auto rbegin(C& c) -> decltype(c.rbegin()); // (1) C++17
template <class C>
auto rbegin(const C& c) -> decltype(c.rbegin()); // (2) C++14
template <class C>
constexpr auto rbegin(const C& c) -> decltype(c.rbegin()); // (2) C++17
template <class T, size_t N>
reverse_iterator<T*> rbegin(T (&array)[N]); // (3) C++14
template <class T, size_t N>
constexpr reverse_iterator<T*> rbegin(T (&array)[N]); // (3) C++17
template <class E>
reverse_iterator<const E*> rbegin(initializer_list<E> il); // (4) C++14
template <class E>
constexpr reverse_iterator<const E*> rbegin(initializer_list<E> il); // (4) C++17
}
概要
範囲の末尾を指す逆イテレータを取得する。
- (1) : コンテナの
rbegin()
メンバ関数で、範囲の末尾を指す、逆イテレータを返す。 - (2) : コンテナの
rbegin()
メンバ関数で、範囲の末尾を指す、読み取り専用逆イテレータを返す。 - (3) : 組み込み配列の末尾を指す、逆イテレータを返す。
- (4) :
initializer_list
オブジェクトの末尾を指す、読み取り専用逆イテレータを返す。
戻り値
- (1) :
c.rbegin();
- (2) :
c.rbegin();
- (3) :
reverse_iterator<T*>(array + N)
- (4) :
reverse_iterator<const E*>(il.end())
例
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
void print(int x)
{
std::cout << x << " ";
}
int main()
{
// コンテナ
{
std::vector<int> v = {1, 2, 3};
decltype(v)::reverse_iterator first = std::rbegin(v);
decltype(v)::reverse_iterator last = std::rend(v);
std::for_each(first, last, print);
}
std::cout << std::endl;
// 組み込み配列
{
int ar[] = {4, 5, 6};
std::reverse_iterator<int*> first = std::rbegin(ar);
std::reverse_iterator<int*> last = std::rend(ar);
std::for_each(first, last, print);
}
std::cout << std::endl;
// 初期化子リスト
{
std::initializer_list<int> init = {7, 8, 9};
std::reverse_iterator<const int*> first = std::rbegin(init);
std::reverse_iterator<const int*> last = std::rend(init);
std::for_each(first, last, print);
}
}
45
std::reverse_iterator<const int*> first = std::rbegin(init);
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
void print(int x)
{
std::cout << x << " ";
}
int main()
{
// コンテナ
{
std::vector<int> v = {1, 2, 3};
decltype(v)::reverse_iterator first = std::rbegin(v);
decltype(v)::reverse_iterator last = std::rend(v);
出力
3 2 1
6 5 4
9 8 7
バージョン
言語
- C++14
処理系
- Clang: 3.4 ✅
- GCC: 5.0 ✅
- ICC: ??
- Visual C++: ??