Defined in header
template<ranges::forward_rangeV>requiresranges::view<V>classslide_view:publicranges::view_interface<slide_view<V>> (1) (since C++23)namespaceviews{inlineconstexpr/* unspecified */slide=/* unspecified */;} (2) (since C++23)Call signature
template<ranges::viewable_rangeR>constexprranges::viewautoslide(R&&r,ranges::range_difference_t<R>n);(since C++23)template<classDifferenceType>constexpr/* range adaptor object */slide(DifferenceType&&n);(since C++23)Helper concepts
template<classV>concept/*slide-caches-nothing*/=ranges::random_access_range<V>&&ranges::sized_range<V>; (3)(exposition only*)template<classV>concept/*slide-caches-last*/=!/*slide-caches-nothing*/<V>&&ranges::bidirectional_range<V>&&ranges::common_range<V>; (4)(exposition only*)template<classV>concept/*slide-caches-first*/=!/*slide-caches-nothing*/<V>&&!/*slide-caches-last*/<V>; (5)(exposition only*)1)slide_view is a range adaptor that takes a
and a number n and produces a view whose mth element (a “window”) is a view over [m, m + n - 1] elements of the original view.
Let s be the size of the original view. Then the size of produced view is:
s-n+1, if s>=n,
0 otherwise, and the resulting view is empty.
2) The name views::slide denotes a
. Given subexpressions e and n, the expression views::slide(e,n) is
to slide_view(e,n).
If n is not greater than 0, the behavior is undefined.
slide_view always models
, and models
,
, or
if adapted
type models the corresponding concept.
Data members
Member Description Vbase_the underlying view
(exposition-only member object*)ranges::range_difference_t<V>n_the “window” size
(exposition-only member object*)
<ranges::iterator_t<V>>cached_begin_
(present only if V models the
)an object that caches the result of
(exposition-only member object*)
<ranges::iterator_t<V>>cached_end_
(present only if V models the
)an object that caches the result of
(exposition-only member object*)Member functions
constructs a slide_view
(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*)(C++23)
the sentinel type used when slide_view is not a
(exposition-only member class template*)Helper templates
template<classV>constexprboolranges::enable_borrowed_range<slide_view<V>>=ranges::enable_borrowed_range<V>;(since C++23)This specialization of
makes slide_view satisfy
when the underlying view satisfies it.
Notes
There are similarities between ranges::adjacent_view and ranges::slide_view:
Both create “sliding window” of size N.
Both have the same size S - N + 1, where S is the size of an adapted
such that S >= N > 0.
The following table shows the differences between these adaptors:
View adaptorvalue_typeThe window size Nranges::adjacent_view
A template parameter ranges::slide_viewranges::rangeA runtime argument
macroValueStdFeature
(C++23)std::ranges::slide_viewExample
Run this code
#include<initializer_list>#include<print>#include<ranges>intmain(){constautov={1,2,3,4,5,6};std::println("All sliding windows of width:");for(constunsignedwidth:std::views::iota(1U,1U+v.size())){autoconstwindows=v|std::views::slide(width);std::println("W = {}: {}",width,windows);}}Output:
All sliding windows of width: W = 1: [[1], [2], [3], [4], [5], [6]] W = 2: [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]] W = 3: [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]] W = 4: [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]] W = 5: [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]] W = 6: [[1, 2, 3, 4, 5, 6]] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior
C++23 slide_view does not provide a base() accessor added References
C++23 standard (ISO/IEC 14882:2024):
26.7.29 Slide view [range.slide]
See also