std::ranges...:stride_view(3)
β¨ NAME β¨
okay so bestie, this is the C++ Standard Libary manual page for std::ranges::views::stride and std::ranges::stride_view β yes, both names, because the page title is literally std::ranges::views::stride,std::ranges::stride_view. Itβs giving βrange adaptor with two names and zero chillβ π
πΈ Synopsis πΈ
Defined in header <ranges>.
template< ranges::input_range V >
requires ranges::view<V>
class stride_view
: public ranges::view_interface<stride_view<V>>
That first one is (1) and itβs (since C++23) β¨
namespace views {
inline constexpr /* unspecified */ stride = /* unspecified */;
}
That second one is (2) and itβs also (since C++23) π
π Call signature π
template< ranges::viewable_range R >
constexpr ranges::view auto stride( R&& r,
ranges::range_difference_t<R> n );
(since C++23) π«Ά
template< class DifferenceType >
constexpr /*range adaptor closure*/ stride( DifferenceType&& n );
(since C++23) β
π§© Helper templates π§©
stride_viewis a range adaptor that takes a view and a numbernand produces a view that consists of elements of the original view by advancing overnelements at a time. This means that eachm^thelement of the produced view is(n * i)^thelement of the original view, for some non-negative indexi. The elements of the original view whose βindexβ is not a multiple ofnare not present in the produced view.
Let S be the size of the original view. Then the size of produced view is:
(S / n) + (S % n ? 1 : 0), ifS >= n; otherwise,1, ifS > 0; otherwise,0, and the resulting view is empty.
- The name
views::stridedenotes aRangeAdaptorObject. Given subexpressionseandn, the expressionviews::stride(e, n)is expression-equivalent tostride_view(e, n).
β οΈ serious caveat, bestie: Thenmust be greater than0, otherwise the behavior is undefined. That is not a vibe. That is UB territory π
stride_view always models input_range, and models forward_range, bidirectional_range, random_access_range, and/or sized_range, if adapted view type V models the corresponding concept. stride_view<V> models common_range whenever the underlying view V does. no cap π
π Member functions π
constructor(C++23)β constructs astride_view(public member function)stride(C++23)β returns the stored stride value (public member function)base(C++23)β returns a copy of the underlying (adapted) view (public member function)begin(C++23)β returns an iterator to the beginning (public member function)end(C++23)β returns an iterator or a sentinel to the end (public member function)size(C++23)β returns the number of elements. Provided only if the underlying (adapted) range satisfiessized_range. (public member function)
π«Ά Inherited from std::ranges::view_interface π«Ά
empty(C++20)β returns whether the derived view is empty. Provided if it satisfiessized_rangeorforward_range. (public member function ofstd::ranges::view_interface<D>)cbegin(C++23)β returns a constant iterator to the beginning of the range. (public member function ofstd::ranges::view_interface<D>)cend(C++23)β returns a sentinel for the constant iterator of the range. (public member function ofstd::ranges::view_interface<D>)operator bool(C++20)β returns whether the derived view is not empty. Provided ifranges::emptyis applicable to it. (public member function ofstd::ranges::view_interface<D>)front(C++20)β returns the first element in the derived view. Provided if it satisfiesforward_range. (public member function ofstd::ranges::view_interface<D>)back(C++20)β returns the last element in the derived view. Provided if it satisfiesbidirectional_rangeandcommon_range. (public member function ofstd::ranges::view_interface<D>)operator[](C++20)β returns then^thelement in the derived view. Provided if it satisfiesrandom_access_range. (public member function ofstd::ranges::view_interface<D>)
π Deduction guides π
The page has the heading here, but no deduction guides are listed β iconic minimalism, I guess π
π¦ Nested classes π¦
iterator(C++23)β the iterator type (exposition-only member class template*)
π§ Helper templates π§
template< class V >
inline constexpr bool ranges::enable_borrowed_range<stride_view<V>> =
ranges::enable_borrowed_range<V>;
(since C++23) β¨
This specialization of ranges::enable_borrowed_range makes stride_view satisfy borrowed_range when the underlying view satisfies it. borrowed-range behavior: slay π«Ά
π Notes π
- Feature-test macro:
__cpp_lib_ranges_strideβ value202207L, standard(C++23), featurestd::ranges::stride_viewπ
π Example π
// Run this code
#include <algorithm>
#include <iostream>
#include <ranges>
#include <string_view>
using namespace std::literals;
void print(std::ranges::viewable_range auto&& v, std::string_view separator = " ")
{
for (auto const& x : v)
std::cout << x << separator;
std::cout << '\n';
}
int main()
{
print(std::views::iota(1, 13) | std::views::stride(3));
print(std::views::iota(1, 13) | std::views::stride(3) | std::views::reverse);
print(std::views::iota(1, 13) | std::views::reverse | std::views::stride(3));
print("0x0!133713337*x//42/A$@"sv | std::views::stride(0B11) |
std::views::transform([](char O) -> char { return 0100 | O; }),
"");
}
π Output π
1 4 7 10
10 7 4 1
12 9 6 3
password
π References π
- C++23 standard (ISO/IEC 14882:2023):
26.7.31 Stride view [range.stride]π
π See also π
ranges::slide_view,views::slide(C++23)β a view whoseM^thelement is a view over theM^ththrough(M + N - 1)^thelements of another view (class template) (range adaptor object)ranges::chunk_view,views::chunk(C++23)β a range of views that areN-sized non-overlapping successive chunks of the elements of another view (class template) (range adaptor object)ranges::adjacent_view,views::adjacent(C++23)β a view consisting of tuples of references to adjacent elements of the adapted view (class template) (range adaptor object)ranges::filter_view,views::filter(C++20)β a view that consists of the elements of a range that satisfies a predicate (class template) (range adaptor object)
π source/version/date sign-off, bestie: http://cppreference.com Β· 2024.06.10 Β· page std::ranges...:stride_view(3) β go forth and stride responsibly π
β¨πΈ
π¦ 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