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*) |
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:
- s - n + 1, if s >= n,
- 0 otherwise, and the resulting view is empty.
- 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
- 1 Data members
- 2 Member functions
- 3 Deduction guides
- 4 Nested classes
- 5 Helper templates
- 6 Notes
- 7 Example
- 8 References
- 9 See also
[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:
- 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 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
C++23 standard (ISO/IEC 14882:2024):
26.7.29 Slide view [range.slide]