std::ranges::views::slide, std::ranges::slide_view - cppreference.com

Defined in header

<ranges>

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

view

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

RangeAdaptorObject

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

expression-equivalent

to slide_view(e,n).

If n is not greater than 0, the behavior is undefined.

slide_view always models

forward_range

, and models

bidirectional_range

,

random_access_range

, or

sized_range

if adapted

view

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*)

non-propagating-cache

<ranges::iterator_t<V>>cached_begin_
(present only if V models the

slide-caches-first

)an object that caches the result of

begin()

(exposition-only member object*)

non-propagating-cache

<ranges::iterator_t<V>>cached_end_
(present only if V models the

slide-caches-last

)an object that caches the result of

end()

(exposition-only member object*)Member functions

(constructor)

constructs a slide_view
(public member function)

[edit]

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*)(C++23)

the sentinel type used when slide_view is not a

common_range

(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

ranges::enable_borrowed_range

makes slide_view satisfy

borrowed_range

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

view

such that S >= N > 0.

The following table shows the differences between these adaptors:

View adaptorvalue_typeThe window size Nranges::adjacent_view

std::tuple

A template parameter ranges::slide_viewranges::rangeA runtime argument

Feature-test

macroValueStdFeature

__cpp_lib_ranges_slide

202202L

(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

LWG 3848

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