std::ranges::zip_view::end(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– NAME πŸ’–

std::ranges::zip_view::end β€” and yeah bestie, the name is literally std::ranges::zip_view::end. We’re on the std::ranges::zip_view::end(3) page from the C++ Standard Libary manual, and it’s giving very specific iterator/sentinel energy πŸ’…βœ¨

✨ Synopsis ✨

Okay so here’s the signature tea β˜•:

constexpr auto end()                                          (1)
(since C++23)
       requires (!(/*simple-view*/<Views> && ...);
constexpr auto end() const                                    (2)
(since C++23)
       requires (ranges::range<const Views> && ...);
template< class... Rs >

  concept /*zip-is-common*/ =
    (sizeof...(Rs) == 1 && (ranges::common_range<Rs> && ...))
    ||
    (!(ranges::bidirectional_range<Rs> && ...) &&             (3)
(exposition only*)
    (ranges::common_range<Rs> && ...))
    ||

    ((ranges::random_access_range<Rs> && ...) &&
(ranges::sized_range<Rs> && ...));

This returns a sentinel or an iterator that compares equal to the end iterator of the std::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 to false. Otherwise,

  • return begin() + std::iter_difference_t</*iterator*/<false>>(size());

if (ranges::random_access_range<Views> && ...) evaluates to true. 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 to false. Otherwise,

  • return begin() + std::iter_difference_t</*iterator*/<true>>(size());

if ranges::random_access_range<const Views> && ... evaluates to true. Otherwise,

  • return /*iterator*/<true>(/*tuple-transform*/(ranges::end, views_));

πŸŽ€ Parameters πŸŽ€

(none) β€” no parameters, bestie 🫢

πŸ¦‹ Return value πŸ¦‹

An iterator or sentinel representing the end of the zip_view, as described above. Periodt πŸ’«

🌸 Notes 🌸

ranges::range<const ranges::zip_view<Views...>> is modeled if and only if for every type Vi in Views..., const Vi models range. That’s the rule, no cap 🧚

πŸ“ Example πŸ“

This section is incomplete Reason: no example

πŸ’œ See also πŸ’œ

  • begin β€” returns an iterator to the beginning (C++23) (public member function)
  • ranges::end β€” returns a sentinel indicating the end of a range (C++20) (customization point object)

⭐ Category ⭐

  • * Todo no example

mwah πŸ’‹ β€” source: http://cppreference.com, version/date: 2024.06.10, page: std::ranges::zip_view::end(3). That’s the whole manual page, bestie β€” iconic, specific, and fully caffeinated πŸŒˆπŸ‘‘

πŸ“¦ where this page comes from