std::ranges::take_view<V>::end
ja.cppreference.net より
constexpr auto end() requires (!/*simple-view*/<V>);
|
(1) | (C++20以降) |
constexpr auto end() const requires ranges::range<const V>;
|
(2) | (C++20以降) |
take_viewの終端を表す番兵またはイテレータを返します。take_viewの終端は、元の範囲のcount番目の要素の次の位置、または元の範囲の要素数がcount個未満の場合は元の範囲の終端のいずれかです。
1)
take_view::/*sentinel*/<false>、std::default_sentinel_t、またはranges::iterator_t<V>を返します。2)
take_view::/*sentinel*/<true>、std::default_sentinel_t、またはranges::iterator_t<const V>を返します。オーバーロード(1)は、Vがsimple viewである場合(つまり、Vとconst Vが同じイテレータ型と番兵型を持つビューである場合)、オーバーロード解決に関与しません。
パラメータ
(なし)
戻り値
結果は、可能性としてconst修飾された基盤となるビュー型Baseが満たすコンセプトに依存します。すなわち、
(1)の場合はV、
(2)の場合はconst Vです。
base_
を基となるビューとする。
|
基となるビュー型が
次を満たす場合... |
random_access_range
|
||
|---|---|---|---|
| はい | いいえ | ||
sized_range
|
はい |
ranges::
begin
(
base_
)
+
ranges:: range_difference_t < Base_ > ( this - > size ( ) ) |
std:: default_sentinel |
| いいえ |
1)
/*sentinel*/
<
false
>
{
ranges::
end
(
base_
)
}
2)
/*sentinel*/
<
true
>
{
ranges::
end
(
base_
)
}
|
||
例
このコードを実行
#include <iostream> #include <iterator> #include <list> #include <ranges> #include <type_traits> namespace ranges = std::ranges; namespace views = std::views; int main() { const auto list1 = {3, 1, 4, 1, 5}; const auto seq1{list1 | views::take(4)}; static_assert(ranges::sized_range<decltype(seq1)> and ranges::random_access_range<decltype(seq1)> and std::is_same_v<decltype(seq1.end()), decltype(list1.end())>); for (auto it = seq1.begin(); it != seq1.end(); ++it) std::cout << *it << ' '; std::cout << '\n'; std::list list2{2, 7, 1, 8, 2}; const auto seq2{list2 | views::take(4)}; static_assert(ranges::sized_range<decltype(seq2)> and not ranges::random_access_range<decltype(seq2)> and std::is_same_v<decltype(seq2.end()), std::default_sentinel_t>); for (auto it = seq2.begin(); it != std::default_sentinel; ++it) std::cout << *it << ' '; std::cout << '\n'; }
出力:
3 1 4 1 2 7 1 8
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| P2393R1 | C++20 | signedとunsignedのinteger-class型間の暗黙変換が失敗する可能性がある | 明示的に変更 |
関連項目
|
先頭を指すイテレータを返す
(公開メンバ関数) |
|
|
(C++20)
|
範囲の終端までの距離を追跡するイテレータアダプタ
(クラステンプレート) |
|
(C++20)
|
take_view::begin
から返されたイテレータとセンチネルを比較する
(関数) |