Namespaces
Variants

std::ranges::cend

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

定数イテレータ(C++23 以降) 用のconst修飾された(C++23 まで) range の終端を示すセンチネルを返します。

CT を次のようにします。

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

とします。ranges::cend の呼び出しは 式と等価です。ranges::end(static_cast<CT&&>(t))

(C++23 まで)

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

  • std::const_sentinel<decltype(U)>(U) 何らかの式 U が ranges::end(possibly-const-range(t)) と等価であるものとして。

その他のすべての場合、ranges::cend の呼び出しは ill-formed であり、テンプレートのインスタンス化の直接の文脈で呼び出しが行われた場合、置換失敗 が発生する可能性があります。

(C++23 以降)

ranges::cend(e) がある式 e に対して有効であり、ここで decltype((e)) は T である場合、CT は std::ranges::range をモデル化し、かつ(C++23 まで) std::sentinel_for<S, I> はすべての場合において true であり、ここで S は decltype(ranges::cend(e))、I は decltype(ranges::cbegin(e)) です。さらに、S が constant-iterator をモデル化する場合、input_iterator をモデル化します。(C++23 以降)

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

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

例

#include <algorithm>
#include <cassert>
#include <ranges>
#include <vector>
int main()
{
    std::vector vec{3, 1, 4};
    int arr[]{5, 10, 15};
    assert(std::ranges::find(vec, 5) == std::ranges::cend(vec));
    assert(std::ranges::find(arr, 5) != std::ranges::cend(arr));
}

関連項目

範囲の終端を示すセンチネルを返す
(カスタマイゼーションポイントオブジェクト)
(C++11) (C++14)
コンテナまたは配列の終端を指すイテレータを返す
(関数テンプレート)