std::ranges::views::stride, std::ranges::stride_view - cppreference.com

From cppreference.com

Defined in header

<ranges>

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

view

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

RangeAdaptorObject

. Given subexpressions e and n, the expression views::stride(e,n) is

expression-equivalent

to stride_view(e,n).

The n must be greater than 0, otherwise the behavior is undefined.

stride_view always models

input_range

, and models

forward_range

,

bidirectional_range

,

random_access_range

, and/or

sized_range

, if adapted

view

type V models the corresponding concept. stride_view<V> models

common_range

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

(constructor)

constructs a stride_view
(public member function)

[edit]

stride

(C++23)

returns the stored stride value
(public member function)

base

returns a copy of the underlying (adapted) view
(public member function)

[edit]

begin

returns an iterator to the beginning
(public member function)

[edit]

end

returns an iterator or a sentinel to the end
(public member function)

[edit]

size

returns the number of elements, provided only if the underlying (adapted) range satisfies

sized_range

(public member function)

[edit]

reserve_hint

(C++26)

returns the approximate size of the resulting

approximately_sized_range

(public member function)

[edit]

Inherited from

std::ranges::view_interface

empty

returns whether the derived view is empty, provided only if it satisfies

sized_range

or

forward_range

(public member function of std::ranges::view_interface<D>)

[edit]

cbegin

(C++23)

returns a constant iterator to the beginning of the range
(public member function of std::ranges::view_interface<D>)

[edit]

cend

(C++23)

returns a sentinel for the constant iterator of the range
(public member function of std::ranges::view_interface<D>)

[edit]

operator bool

returns whether the derived view is not empty, provided only if

ranges::empty

is applicable to it
(public member function of std::ranges::view_interface<D>)

[edit]

front

returns the first element in the derived view, provided if it satisfies

forward_range

(public member function of std::ranges::view_interface<D>)

[edit]

back

returns the last element in the derived view, provided only if it satisfies

bidirectional_range

and

common_range

(public member function of std::ranges::view_interface<D>)

[edit]

operator[]

returns the nth element in the derived view, provided only if it satisfies

random_access_range

(public member function of std::ranges::view_interface<D>)

[edit]

Deduction guides

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

ranges::enable_borrowed_range

makes stride_view satisfy

borrowed_range

when the underlying view satisfies it.

Notes

Feature-test

macroValueStdFeature

__cpp_lib_ranges_stride

202207L

(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