Namespaces
Variants

std::ranges:: cend

From cppreference.net
Ranges library
Range adaptors
定義先ヘッダ <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-begin-end.svg

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 の呼び出しは 式等価 である:

それ以外の場合、 ranges::cend の呼び出しは不適格であり、 置換失敗 を引き起こす可能性がある(呼び出しがテンプレートのインスタンス化の直接の文脈に現れる場合)。

(C++23以降)

e に対して ranges :: cend ( 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 input_iterator をモデルする場合は constant-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)
コンテナまたは配列の終端を指すイテレータを返す
(関数テンプレート)