名前空間
変種
操作

std::ranges::crbegin

From cppreference.com
< cpp‎ | ranges
 
 
Rangesライブラリ
Rangeアダプタ
 
ヘッダ <ranges> で定義
ヘッダ <iterator> で定義
inline namespace /* 未指定 */ {

    inline constexpr /* 未指定 */ crbegin = /* 未指定 */;

}
(C++20以降)
(カスタマイズポイントオブジェクト)
呼び出しシグネチャ
template< class T >

    requires /* 以下を参照 */

constexpr /* 以下参照 */ auto crbegin( T&& t );
(C++20以降)

逆順のシーケンスとして扱われる、const修飾された引数の最初の要素へのイテレータを返します。

(C++23まで)

逆順のシーケンスとして扱われる引数の最初の要素へのconstイテレータを返します。

(C++23から)

range-rbegin-rend.svg

CT を次のようにします。

  • 引数が左辺値(つまり、T が左辺値参照型)の場合、const std::remove_reference_t<T>&
  • それ以外の場合、const T

ranges::crbeginの呼び出しは、 ranges::rbegin(static_cast<CT&&>(t))式等価です。

(C++23まで)

引数がlvalueであるか、または ranges::enable_borrowed_range<std::remove_cv_t<T>>true の場合、ranges::crbeginの呼び出しは

それ以外の場合、ranges::crbeginの呼び出しはill-formedであり、テンプレートインストールの即時コンテキストで呼び出しが現れると置換失敗につながる可能性があります。

(C++23から)

返される型は、すべての場合において std::input_or_output_iterator および constant-iterator(C++23以降) をモデル化します。

カスタマイゼーションポイントオブジェクト

ranges::crbeginという名前はカスタマイゼーションポイントオブジェクトを指します。これは、リテラルsemiregular クラス型の、constな 関数オブジェクトです。説明のために、その型のcv-unqualifiedバージョンを__crbegin_fnと表します。

__crbegin_fnのすべてのインスタンスは等価です。同じ引数に対して異なる__crbegin_fn型のインスタンスを呼び出す効果は、インスタンスを示す式がlvalueかrvalueか、const修飾されているか否かに関わらず等価です(ただし、volatile修飾されたインスタンスが呼び出し可能である必要はありません)。したがって、ranges::crbeginは自由にコピーでき、そのコピーは相互に交換可能に使用できます。

Args...のセットが与えられた場合、std::declval<Args>()... が上記のranges::crbeginの引数要件を満たす場合、__crbegin_fnは以下をモデル化します。

それ以外の場合、__crbegin_fnの関数呼び出し演算子はオーバーロード解決に参加しません。

[編集]

#include <cassert>
#include <iterator>
#include <span>
#include <vector>
 
int main()
{
    std::vector<int> v{3, 1, 4};
    auto vi = std::ranges::crbegin(v);
    assert(*vi == 4);
    ++vi; // OK, iterator object is mutable
    assert(*vi == 1);
    // *vi = 13; // Error: underlying element is read-only
 
    int a[]{-5, 10, 15};
    auto ai = std::ranges::crbegin(a);
    assert(*ai == 15);
 
    // auto x_x = std::ranges::crbegin(std::vector<int>{6, 6, 6});
    // ill-formed: the argument is an rvalue (see Notes ↑)
 
    auto si = std::ranges::crbegin(std::span{a}); // OK
    assert(*si == 15);
    static_assert
    (
        std::ranges::enable_borrowed_range<std::remove_cv_t<decltype(std::span{a})>>
    );
}

[編集] 関連項目

rangeへの逆イテレータを返す
(カスタマイゼーションポイントオブジェクト)[編集]
コンテナまたは配列の先頭を指す逆順イテレータを返す
(function template) [編集]
English 日本語 中文(简体) 中文(繁體)