std::ranges::views::slide, std::ranges::slide_view - cppreference.com (original) (raw)

Defined in header
template< ranges::forward_range V > requires ranges::view<V> class slide_view : public ranges::view_interface<slide_view<V>> (1) (since C++23)
namespace views { inline constexpr /* unspecified */ slide = /* unspecified */; } (2) (since C++23)
Call signature
template< ranges::viewable_range R > constexpr ranges::view auto slide( R&& r, ranges::range_difference_t<R> n ); (since C++23)
template< class DifferenceType > constexpr /* range adaptor object */ slide( DifferenceType&& n ); (since C++23)
Helper concepts
template< class V > concept /*slide-caches-nothing*/ = ranges::random_access_range<V> && ranges::sized_range<V>; (3) (exposition only*)
template< class V > concept /*slide-caches-last*/ = !/*slide-caches-nothing*/<V> && ranges::bidirectional_range<V> && ranges::common_range<V>; (4) (exposition only*)
template< class V > 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 _m_th 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:

  1. 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.

Contents

[edit] Data members

[edit] Member functions

(constructor) constructs a slide_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) [edit]
cbegin(C++23) returns a constant iterator to the beginning of the range (public member function of std::ranges::view_interface) [edit]
cend(C++23) returns a sentinel for the constant iterator of the range (public member function of std::ranges::view_interface) [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) [edit]
front returns the first element in the derived view, provided if it satisfies forward_range (public member function of std::ranges::view_interface) [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) [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) [edit]

[edit] Deduction guides

[edit] Nested classes

| | the iterator type(exposition-only member class template*) | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | | the sentinel type used when slide_view is not a common_range(exposition-only member class template*) |

[edit] Helper templates

This specialization of ranges::enable_borrowed_range makes slide_view satisfy borrowed_range when the underlying view satisfies it.

[edit] Notes

There are similarities between ranges::adjacent_view and ranges::slide_view:

The following table shows the differences between these adaptors:

View adaptor value_type The window size N
ranges::adjacent_view std::tuple A template parameter
ranges::slide_view ranges::range A runtime argument
Feature-test macro Value Std Feature
__cpp_lib_ranges_slide 202202L (C++23) std::ranges::slide_view

[edit] Example

#include #include #include #include   auto print_subrange = auto&& r) { std::cout << '['; for (char space[]{0,0}; auto elem : r) std::cout << space << elem, *space = ' '; std::cout << "] "; };   int main() { const auto v = {1, 2, 3, 4, 5, 6};   std::cout << "All sliding windows of width:\n"; for (const unsigned width : std::views::iota(1U, 1U + v.size())) { auto const windows = v | std::views::slide(width); std::cout << "W = " << width << ": "; std::ranges::for_each(windows, print_subrange); std::cout << '\n'; } }

Output:

All sliding windows of width W: 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]

[edit] References

[edit] See also