std::ranges::zip_view<Views...>::end
From cppreference.com
constexpr auto end()
requires (!(/*simple-view*/<Views> && ...);
|
(1) | (since C++23) |
constexpr auto end() const
requires (ranges::range<const Views> && ...);
|
(2) | (since C++23) |
template< class... Rs >
concept /*zip-is-common*/ =
(sizeof...(Rs) == 1 && (ranges::common_range<Rs> && ...))
||
(!(ranges::bidirectional_range<Rs> && ...) && (ranges::common_range<Rs> && ...))
||
((ranges::random_access_range<Rs> && ...) && (ranges::sized_range<Rs> && ...));
|
(3) | (exposition only*) |
Returns an iterator or a sentinel that compares equal to the end iterator of the zip_view.
Let views_ denote the underlying tuple of views.
1) Equivalent to:
return /*sentinel*/<false>(/*tuple-transform*/(ranges::end, views_));,
- if
/*zip-is-common*/<Views...>evaluates tofalse. Otherwise,
return begin() + std::iter_difference_t</*iterator*/<false>>(size());,
- if
(ranges::random_access_range<Views> && ...)evaluates totrue. Otherwise,
return /*iterator*/<false>(/*tuple-transform*/(ranges::end, views_));.
2) Equivalent to:
return /*sentinel*/<true>(/*tuple-transform*/(ranges::end, views_));,
- if
/*zip-is-common*/<const Views...>evaluates tofalse. Otherwise,
return begin() + std::iter_difference_t</*iterator*/<true>>(size());,
- if
ranges::random_access_range<const Views> && ...evaluates totrue. Otherwise,
return /*iterator*/<true>(/*tuple-transform*/(ranges::end, views_));.
Parameters
(none)
Return value
An iterator or sentinel representing the end of the zip_view, as described above.
Notes
ranges::range<const ranges::zip_view<Views...>> is modeled if and only if for every type Vi in Views..., const Vi models range.
Example
| This section is incomplete Reason: no example |
See also
| returns an iterator to the beginning (public member function) | |
(C++20) |
returns a sentinel indicating the end of a range (customization point object) |