std::ranges::stride_view::begin(3)

NAME
std::ranges::stride_view::begin - std::ranges::stride_view::begin

Synopsis
   constexpr auto begin() requires (!__simple_view<V>); (1) (since C++23)
   constexpr auto begin() const requires ranges::range<const V>; (2) (since C++23)
   Returns an iterator to the first element of the stride_view.
   1) Equivalent to return iterator<false>(this, ranges::begin(base_));.
   2) Equivalent to return iterator<true>(this, ranges::begin(base_));.
   Overload (1) does not participate in overload resolution if V is a simple view (that
   is, if V and const V are views with the same iterator and sentinel types).

Parameters
   (none)

Return value
   Iterator to the first element of the view.

Example
   A link to test: Compiler Explorer. // Run this code
 #include <print>
 #include <ranges>
 int main()
 {
     constexpr auto v = {'A', 'B', 'C'};
     const auto x = v | std::views::stride(2);
     const auto y = v | std::views::reverse | std::views::stride(2);
     const auto z = v | std::views::stride(2) | std::views::reverse;
     std::println("{} {} {}", *x.begin(), *y.begin(), *z.begin());
 }

Output:
 A C C

See also
   end returns an iterator or a sentinel to the end
   (C++23) (public member function)