Spec-Zone.ru › C++

std::ranges::views::stride, std::ranges::stride_view

Определено в заголовочном файле <ranges>
template< ranges::input_range V >
    requires ranges::view<V>
class stride_view
    : public ranges::view_interface<stride_view<V>>
(1) (начиная с C++23)
namespace views {
    inline constexpr /* unspecified */ stride = /* unspecified */;
}
(2) (начиная с C++23)
Сигнатура вызова
template< ranges::viewable_range R >
constexpr ranges::view auto stride( R&& r, ranges::range_difference_t<R> n );
(начиная с C++23)
template< class DifferenceType >
constexpr /*range adaptor closure*/ stride( DifferenceType&& n );
(начиная с C++23)
Вспомогательные шаблоны
1) stride_view — это адаптер диапазона, который принимает view и число n и создает представление, состоящее из элементов исходного представления с переходом через n элементов за раз. Это означает, что каждый m-й элемент созданного представления является (n * i)-м элементом исходного представления для некоторого неотрицательного индекса i. Элементы исходного представления, чей «индекс» не кратен n, в созданное представление не входят.
Пусть S — размер исходного представления. Тогда размер созданного представления равен:
  • (S / n) + (S % n ? 1 : 0), если S >= n; в противном случае
  • 1, если S > 0; в противном случае
  • 0, и результирующее представление пусто.
2) Имя views::stride обозначает объект-адаптер диапазона. Для подвыражений e и n выражение views::stride(e, n) эквивалентно выражению stride_view(e, n).
Значение n должно быть больше 0, иначе поведение не определено.

stride_view всегда моделирует input_range и моделирует forward_range, bidirectional_range, random_access_range и/или sized_range, если тип адаптированного view V моделирует соответствующую концепцию. stride_view<V> моделирует common_range, если базовое представление V моделирует эту концепцию.

Поля данных

Поле Описание
V base_ базовое представление
(служебный объект-член*)
ranges::range_difference_t<V> stride_ объект размера («шаг»)
(служебный объект-член*)

Функции-члены

(конструктор)
создает stride_view
(открытая функция-член)
stride
(C++23)
возвращает сохраненное значение шага
(открытая функция-член)
base
возвращает копию базового (адаптированного) представления
(открытая функция-член)
begin
возвращает итератор на начало
(открытая функция-член)
end
возвращает итератор или сентинел конца
(открытая функция-член)
size
возвращает число элементов; доступна только если базовый (адаптированный) диапазон удовлетворяет концепции sized_range
(открытая функция-член)
reserve_hint
(C++26)
возвращает приблизительный размер результирующего approximately_sized_range
(открытая функция-член)
Унаследовано от std::ranges::view_interface
empty
возвращает значение, указывающее, пусто ли производное представление; доступна только если оно удовлетворяет концепции sized_range или forward_range
(открытая функция-член std::ranges::view_interface<D>)
cbegin
(C++23)
возвращает константный итератор на начало диапазона
(открытая функция-член std::ranges::view_interface<D>)
cend
(C++23)
возвращает сентинел для константного итератора диапазона
(открытая функция-член std::ranges::view_interface<D>)
operator bool
возвращает значение, указывающее, что производное представление не пусто; доступна только если к нему применима концепция ranges::empty
(открытая функция-член std::ranges::view_interface<D>)
front
возвращает первый элемент производного представления; доступна, если оно удовлетворяет концепции forward_range
(открытая функция-член std::ranges::view_interface<D>)
back
возвращает последний элемент производного представления; доступна только если оно удовлетворяет концепциям bidirectional_range и common_range
(открытая функция-член std::ranges::view_interface<D>)
operator[]
возвращает n-й элемент производного представления; доступна только если оно удовлетворяет концепции random_access_range
(открытая функция-член std::ranges::view_interface<D>)

Руководства по выводу типов

Вложенные классы

iterator
(C++23)
тип итератора
(служебный шаблон класса-члена*)

Вспомогательные шаблоны

template< class V >
constexpr bool ranges::enable_borrowed_range<stride_view<V>> =
    ranges::enable_borrowed_range<V>;
(начиная с C++23)

Эта специализация ranges::enable_borrowed_range позволяет stride_view удовлетворять концепции borrowed_range, если ей удовлетворяет базовое представление.

Примечания

Макрос проверки поддержки возможности Значение Стандарт Возможность
__cpp_lib_ranges_stride 202207L (C++23) std::ranges::stride_view

Пример

#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; }),
          "");
}

Вывод:

1 4 7 10
10 7 4 1
12 9 6 3
password

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
    • 26.7.31 Представление с шагом [range.stride]

См. также

ranges::slide_viewviews::slide
(C++23)
представление view, M-й элемент которого является view над элементами с M-го по (M + N - 1)-й другого view
(шаблон класса) (объект-адаптер диапазона)
ranges::chunk_viewviews::chunk
(C++23)
диапазон из views, представляющих собой последовательные неперекрывающиеся фрагменты элементов другого view размером N
(шаблон класса) (объект-адаптер диапазона)
ranges::adjacent_viewviews::adjacent
(C++23)
представление view, состоящее из кортежей ссылок на соседние элементы адаптированного представления
(шаблон класса) (объект-адаптер диапазона)
ranges::filter_viewviews::filter
(C++20)
представление view, состоящее из элементов range, удовлетворяющих предикату
(шаблон класса) (объект-адаптер диапазона)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/stride_view

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API