Namespaces
Variants

std::ranges::crend

ja.cppreference.net より
 
 
レンジライブラリ
レンジアダプタ
 
ヘッダで定義 <ranges>
ヘッダで定義 <iterator>
inline namespace /* unspecified */ {
    inline constexpr /* unspecified */ crend = /* unspecified */;
}
(C++20 以上)
(カスタマイゼーションポイントオブジェクト)
呼び出しシグネチャ
template< class T >
    requires /* see below */
constexpr /* see below */ auto crend( T&& t );
(C++20 以上)

const イテレータのセンチネルを返します (C++23 以上) 逆順シーケンスとして扱われるレンジの終端を示します。なお、C++23 未満では const 修飾された レンジに対してのみ動作します。

CT を次のように定義します:

  • const std::remove_reference_t<T>& 引数が左辺値の場合(すなわち T が左辺値参照型の場合)、
  • const T それ以外の場合。

ranges::crend への呼び出しは と式等価ranges::rend(static_cast<CT&&>(t))です。

(C++23 未満)

引数が左辺値であるか、または ranges::enable_borrowed_range<std::remove_cv_t<T>> が true である場合、ranges::crend への呼び出しは と式等価

と等価です。 ranges::crend それ以外のすべての場合、 への呼び出しは ill-formed であり、テンプレートのインスタンス化の即時コンテキスト内で現れた場合、 置換失敗

を引き起こす可能性があります。

(C++23 以上)ranges::crend(e)e が式 decltype((e)) に対して有効である場合、ただし T は CT であり、 は std::ranges::range をモデル化し、 std::sentinel_for<S, I>(C++23 未満)trueS はすべての場合において decltype(ranges::crend(e)) であり、ただし I は decltype(ranges::crbegin(e)) であり、 は S です。 constant-iterator さらに、 は input_iterator をモデル化する場合、

をモデル化します。

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

名前 ranges::crend は カスタマイゼーションポイントオブジェクト を表し、これは 関数オブジェクト のconst版で、 リテラル型 semiregular クラス型である。詳細は CustomizationPointObject を参照。

例

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
    int a[]{4, 6, -3, 9, 10};
    std::cout << "Array backwards: ";
    namespace ranges = std::ranges;
    ranges::copy(ranges::rbegin(a), ranges::rend(a),
                 std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    std::cout << "Vector backwards: ";
    std::vector v{4, 6, -3, 9, 10};
    ranges::copy(ranges::rbegin(v), ranges::rend(v),
                 std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
}

出力:

Array backwards: 10 9 -3 6 4
Vector backwards: 10 9 -3 6 4

関連項目

範囲に対する逆方向終端イテレータを返す
(カスタマイゼーションポイントオブジェクト)
(C++14)
コンテナまたは配列に対する逆方向終端イテレータを返す
(関数テンプレート)