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