From cppreference.com
Defined in header
template<ranges::input_rangeV>requiresranges::view<V>classstride_view:publicranges::view_interface<stride_view<V>> (1) (since C++23)namespaceviews{inlineconstexpr/* unspecified */stride=/* unspecified */;} (2) (since C++23)Call signature
template<ranges::viewable_rangeR>constexprranges::viewautostride(R&&r,ranges::range_difference_t<R>n);(since C++23)template<classDifferenceType>constexpr/*range adaptor closure*/stride(DifferenceType&&n);(since C++23)Helper templates
1)stride_view is a range adaptor that takes a
and a number n and produces a view, that consists of elements of the original view by advancing over n elements at a time. This means that each mth element of the produced view is (n * i)th element of the original view, for some non-negative index i. The elements of the original view, whose “index” is not a multiple of n, are not present in the produced view.
Let S be the size of the original view. Then the size of produced view is:
(S/n)+(S%n?1:0), if S>=n; otherwise,
1, if S>0; otherwise,
0, and the resulting view is empty.
2) The name views::stride denotes a
. Given subexpressions e and n, the expression views::stride(e,n) is
to stride_view(e,n).
The n must be greater than 0, otherwise the behavior is undefined.
stride_view always models
, and models
,
,
, and/or
, if adapted
type V models the corresponding concept. stride_view<V> models
whenever the underlying view V does.
Data members
Member Description Vbase_the underlying view
(exposition-only member object*)ranges::range_difference_t<V>stride_the size object (the “stride”)
(exposition-only member object*)Member functions
constructs a stride_view
(public member function)
(C++23)
returns the stored stride value
(public member function)
returns a copy of the underlying (adapted) view
(public member function)
returns an iterator to the beginning
(public member function)
returns an iterator or a sentinel to the end
(public member function)
returns the number of elements, provided only if the underlying (adapted) range satisfies
(public member function)
(C++26)
returns the approximate size of the resulting
(public member function)
Inherited from
returns whether the derived view is empty, provided only if it satisfies
or
(public member function of std::ranges::view_interface<D>)
(C++23)
returns a constant iterator to the beginning of the range
(public member function of std::ranges::view_interface<D>)
(C++23)
returns a sentinel for the constant iterator of the range
(public member function of std::ranges::view_interface<D>)
returns whether the derived view is not empty, provided only if
is applicable to it
(public member function of std::ranges::view_interface<D>)
returns the first element in the derived view, provided if it satisfies
(public member function of std::ranges::view_interface<D>)
returns the last element in the derived view, provided only if it satisfies
and
(public member function of std::ranges::view_interface<D>)
returns the nth element in the derived view, provided only if it satisfies
(public member function of std::ranges::view_interface<D>)
Nested classes
(C++23)
the iterator type
(exposition-only member class template*)Helper templates
template<classV>constexprboolranges::enable_borrowed_range<stride_view<V>>=ranges::enable_borrowed_range<V>;(since C++23)This specialization of
makes stride_view satisfy
when the underlying view satisfies it.
Notes
macroValueStdFeature
(C++23)std::ranges::stride_viewExample
Run this code
#include<algorithm>#include<iostream>#include<ranges>#include<string_view>usingnamespacestd::literals;voidprint(std::ranges::viewable_rangeauto&&v,std::string_viewseparator=" "){for(autoconst&x:v)std::cout<<x<<separator;std::cout<<'\n';}intmain(){print(std::views::iota(1,13)|std::views::stride(3));print(std::views::iota(1,13)|std::views::stride(3)|std::views::reverse);print(std::views::iota(1,13)|std::views::reverse|std::views::stride(3));print("0x0!133713337*x//42/A$@"sv|std::views::stride(0B11)|std::views::transform([](charO)->char{return0100|O;}),"");}Output:
1 4 7 10 10 7 4 1 12 9 6 3 password References
C++23 standard (ISO/IEC 14882:2024):
26.7.31 Stride view [range.stride]
See also