std::rbegin, std::crbegin
| ヘッダ <array>
|
||
| で定義 <deque>
|
||
| ヘッダ <flat_map>
|
で定義 (C++23以上) |
|
| ヘッダ <flat_set>
|
で定義 (C++23以上) |
|
| ヘッダ <forward_list>
|
||
ヘッダ |
||
| で定義 (C++26以上) <iterator>
|
||
| ヘッダ <list>
|
||
| で定義 <map>
|
||
| ヘッダ <optional>
|
で定義 (C++26以上) |
|
| ヘッダ <regex>
|
||
| で定義 <set>
|
||
| ヘッダ <span>
|
で定義 (C++20以上) |
|
| ヘッダ <stacktrace>
|
で定義 (C++23以上) |
|
| ヘッダ <string>
|
||
ヘッダ |
||
| で定義 (C++17以上) <unordered_map>
|
||
| ヘッダ <unordered_set>
|
||
| で定義 <valarray>
|
||
| ヘッダ <vector>
|
||
template< class C >
auto rbegin( C& c ) noexcept(noexcept(c.rbegin()))
-> decltype(c.rbegin());
|
で定義 (1) | (C++14以上) (C++17以上でconstexpr) |
template< class C >
auto rbegin( const C& c ) noexcept(noexcept(c.rbegin()))
-> decltype(c.rbegin());
|
(2) | (C++14以上) (C++17以上でconstexpr) |
template< class T, std::size_t N >
std::reverse_iterator<T*> rbegin( T (&array)[N] ) noexcept;
|
(3) | (C++14以上) (C++17以上でconstexpr) |
template< class T >
std::reverse_iterator<const T*> rbegin( std::initializer_list<T> il ) noexcept;
|
(4) | (C++14以上) (C++17以上でconstexpr) |
template< class C >
auto crbegin( const C& c ) noexcept(noexcept(std::rbegin(c)))
-> decltype(std::rbegin(c));
|
(5) | (C++14以上) (C++17以上でconstexpr) |
指定された範囲の逆順先頭を指すイテレータを返します。
c.rbegin() を返します。これは通常、c で表されるシーケンスの逆順先頭を指すイテレータです。std::reverse_iterator<T*> の逆順先頭を指す array オブジェクトを返します。std::reverse_iterator<const T*> の逆順先頭を指す il オブジェクトを返します。std::rbegin(c) を返します。c は常に const 修飾されているものとして扱われます。
パラメータ
| c | - |
rbeginメンバ関数を持つコンテナまたはビュー
|
| array | - | 任意の型の配列 |
| il | - | std:: initializer_list |
戻り値
例外
実装定義の例外をスローする可能性があります。
オーバーロード
クラスおよび列挙型に対して、適切な
rbegin()
メンバ関数を公開していないが、反復処理が可能な場合、
rbegin
のカスタムオーバーロードを提供することができます。
|
実引数依存の名前探索
によって見つかった
|
(C++20以降) |
注記
std::initializer_list
のオーバーロードは、
rbegin
メンバ関数を持たないため必要です。
例
#include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v = {3, 1, 4}; auto vi = std::rbegin(v); // "vi"の型はstd::vector<int>::reverse_iterator std::cout << "*vi = " << *vi << '\n'; *std::rbegin(v) = 42; // OK: 代入後 v[2] == 42 // *std::crbegin(v) = 13; // エラー: 読み取り専用の位置です int a[] = {-5, 10, 15}; auto ai = std::rbegin(a); // "ai"の型はstd::reverse_iterator<int*> std::cout << "*ai = " << *ai << '\n'; auto il = {3, 1, 4}; // 以下の"it"の型はstd::reverse_iterator<int const*>: for (auto it = std::rbegin(il); it != std::rend(il); ++it) std::cout << *it << ' '; std::cout << '\n'; }
出力:
*vi = 4 *ai = 15 4 1 3
欠陥報告
以下の動作を変更する欠陥報告は、過去に公開されたC++標準に対して遡及的に適用されました。
| DR | 適用先 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3537 | C++14 | std::rbegin および std::crbegin は例外仕様の伝播を要求されていなかった
|
要求される |
関連項目
|
(C++11)
(C++14)
|
コンテナまたは配列の先頭を指すイテレータを返す
(関数テンプレート) |
|
(C++11)
(C++14)
|
コンテナまたは配列の終端を指すイテレータを返す
(関数テンプレート) |
|
(C++14)
|
コンテナまたは配列の逆方向終端イテレータを返す
(関数テンプレート) |
|
(C++20)
|
範囲の逆方向イテレータを返す
(カスタマイゼーションポイントオブジェクト) |
|
(C++20)
|
読み取り専用範囲の逆方向イテレータを返す
(カスタマイゼーションポイントオブジェクト) |