std::ranges...::slide_view(3)
π NAME π
okay bestie, this is the std::ranges...::slide_view(3) page from the C++ Standard Libary manual, and we are about to make sliding windows feel like main character energy β¨
The names are std::ranges::views::slide,std::ranges::slide_view β and the short description is literally the same thing again: std::ranges::views::slide,std::ranges::slide_view π
β¨ Synopsis β¨
Defined in header <ranges> β yes, that's right, bestie π«Ά
template< ranges::forward_range V >
requires ranges::view<V> (1)
(since C++23)
class slide_view
: public ranges::view_interface<slide_view<V>>
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,
(since C++23)
ranges::range_difference_t<R> n );
template< class DifferenceType >
constexpr /* range adaptor object */ slide( DifferenceType&&
(since C++23)
n );
π§ Helper concepts π§
template< class V >
concept __slide_caches_nothing = (3)
(exposition only*)
ranges::random_access_range<V> && ranges::sized_range<V>;
template< class V >
concept __slide_caches_last =
!__slide_caches_nothing<V> && (4)
(exposition only*)
ranges::bidirectional_range<V> &&
ranges::common_range<V>;
template< class V >
concept __slide_caches_first = (5)
(exposition only*)
!__slide_caches_nothing<V> && !__slide_caches_last<V>;
slide_viewis a range adaptor that takes a view and a numbernand produces a view whosem ^thelement (a "window") is a view over them ^ththrough(m + n - 1) ^thelements of the original view. Letsbe the size of the original view. Then the size of the produced view is:s - n + 1, ifs >= n,0otherwise, and the resulting view is empty.
- The name
views::slidedenotes aRangeAdaptorObject. Given subexpressionseandn, the expressionviews::slide(e, n)is expression-equivalent toslide_view(e, n).
π¨ Ifnis not greater than0, the behavior is undefined. π¨
slide_view always models forward_range, and models bidirectional_range, random_access_range, or sized_range if the adapted view type models the corresponding concept. no cap β¨
π οΈ Member functions π οΈ
constructorβ constructs aslide_view.(C++23)(public member function).beginβ returns an iterator to the beginning.(C++23)(public member function).endβ returns an iterator or a sentinel to the end.(C++23)(public member function).sizeβ returns the number of elements. Provided only if the underlying (adapted) range satisfiessized_range.(C++23)(public member function).
π«Ά Inherited from std::ranges::view_interface π«Ά
emptyβ returns whether the derived view is empty. Provided if it satisfiessized_rangeorforward_range.(C++20)(public member function ofstd::ranges::view_interface<D>).cbeginβ returns a constant iterator to the beginning of the range.(C++23)(public member function ofstd::ranges::view_interface<D>).cendβ returns a sentinel for the constant iterator of the range.(C++23)(public member function ofstd::ranges::view_interface<D>).operator boolβ returns whether the derived view is not empty. Provided ifranges::emptyis applicable to it.(C++20)(public member function ofstd::ranges::view_interface<D>).frontβ returns the first element in the derived view. Provided if it satisfiesforward_range.(C++20)(public member function ofstd::ranges::view_interface<D>).backβ returns the last element in the derived view. Provided if it satisfiesbidirectional_rangeandcommon_range.(C++20)(public member function ofstd::ranges::view_interface<D>).operator[]β returns then^thelement in the derived view. Provided if it satisfiesrandom_access_range.(C++20)(public member function ofstd::ranges::view_interface<D>).
π§ Deduction guides π§
The original page has this heading, but no extra deduction-guide details are spelled out underneath it here β so we are not inventing any, bestie. periodt π
πͺ Nested classes πͺ
iteratorβ the iterator type.(C++23)(exposition-only member class template*).sentinelβ the sentinel type used whenslide_viewis not acommon_range.(C++23)(exposition-only member class template*).
π§° Helper templates π§°
template< class V >
inline constexpr bool ranges::enable_borrowed_range<slide_view<V>> =
(since C++23)
ranges::enable_borrowed_range<V>;
This specialization of ranges::enable_borrowed_range makes slide_view satisfy borrowed_range when the underlying view satisfies it. iconic behavior honestly π
π Notes π
There are similarities between ranges::adjacent_view and ranges::slide_view:
- Both create a "sliding window" of size
N. - Both have the same size
S - N + 1, whereSis the size of an adapted view such thatS >= N > 0.
The differences between these adapters are:
ranges::adjacent_viewβvalue_type: Astd::tupleobject. The window sizeN: A template parameter.ranges::slide_viewβvalue_type: A range. The window sizeN: A runtime parameter.
Feature-test macro:
__cpp_lib_ranges_slideβ value202202L, std(C++23), featurestd::ranges::slide_view.
π Example π
// Run this code
#include <algorithm>
#include <iostream>
#include <ranges>
auto print_subrange = [](std::ranges::viewable_range 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]
π References π
- C++23 standard (ISO/IEC 14882:2023):
26.7.29 Slide view [range.slide]
π See also π
ranges::adjacent_viewβ a view consisting of tuples of references to adjacent elements of the adapted view.views::adjacentβ(C++23)(class template) (range adaptor object).ranges::chunk_viewβ a range of views that areN-sized non-overlapping successive chunks of the elements of another view.views::chunkβ(C++23)(class template) (range adaptor object).
okay that's the whole page, bestie β source/version and date sign-off: http://cppreference.com, 2024.06.10, and page std::ranges...::slide_view(3). slay, go build some windows π
β¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms