std::ranges::cend
| ヘッダ <ranges> で定義 |
||
| ヘッダ <iterator> で定義 |
||
| inline namespace /* 未指定 */ { inline constexpr /* 未指定 */ cend = /* 未指定 */; |
(C++20以降) (カスタマイズポイントオブジェクト) |
|
| 呼び出しシグネチャ |
||
| template< class T > requires /* 以下を参照 */ |
(C++20以降) | |
範囲の終端を示すセンチネルを返します。定数イテレータのセンチネル(C++23 以降) const 修飾された(C++23 まで) 範囲の終端を示します。
|
|
(C++23まで) |
|
引数が左辺値であるか、または ranges::enable_borrowed_range<std::remove_cv_t<T>> が true の場合、
それ以外の場合、 |
(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 という名前は、カスタマイズポイントオブジェクト を指します。これは、リテラルな LiteralType の semiregular クラス型の const な 関数オブジェクトです。説明のため、cv 修飾されていない型は __cend_fn と表記されます。
__cend_fn のすべてのインスタンスは等価です。同じ引数に対して異なる __cend_fn 型のインスタンスを呼び出す効果は、インスタンスを表す式が左辺値か右辺値か、cv 修飾されているか否かに関わらず同等です(ただし、volatile 修飾されたインスタンスは呼び出し可能である必要はありません)。したがって、ranges::cend は自由にコピーでき、そのコピーは相互に交換可能に使用できます。
型のセット Args... が与えられた場合、std::declval<Args>()... が上記の ranges::cend の引数要件を満たす場合、__cend_fn は以下をモデル化します。
- std::invocable<__cend_fn, Args...>,
- std::invocable<const __cend_fn, Args...>,
- std::invocable<__cend_fn&, Args...>、および
- std::invocable<const __cend_fn&, Args...>.
それ以外の場合、__cend_fn の関数呼び出し演算子はオーバーロード解決に参加しません。
[編集] 例
#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++20) |
rangeの終端を示す番兵を返す (カスタマイゼーションポイントオブジェクト) |
| (C++11)(C++14) |
コンテナまたは配列の末尾を指すイテレータを返す (関数テンプレート) |