Namespaces
Variants

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

Начиная с ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
Определён в заголовочном файле <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 обозначает RangeAdaptorObject. Для данных подвыражений e и n выражение views::stride(e, n) является expression-equivalent к 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
(публичная функция-член)
(C++23)
возвращает сохраненное значение шага
(публичная функция-член)
возвращает копию базового (адаптированного) представления
(публичная функция-член)
возвращает итератор на начало
(публичная функция-член)
возвращает итератор или страж на конец
(публичная функция-член)
возвращает количество элементов, предоставляется только если базовый (адаптированный) диапазон удовлетворяет sized_range
(публичная функция-член)
возвращает приблизительный размер результирующего approximately_sized_range
(публичная функция-член)
Унаследовано от ranges::view_interface
возвращает, пусто ли производное представление, предоставляется только если оно удовлетворяет sized_range или forward_range
(открытая функция-элемент класса std::ranges::view_interface<D>)
(C++23)
возвращает константный итератор на начало диапазона
(открытая функция-элемент класса std::ranges::view_interface<D>)
(C++23)
возвращает ограничитель для константного итератора диапазона
(открытая функция-элемент класса std::ranges::view_interface<D>)
возвращает, не пусто ли производное представление, предоставляется только если к нему применим ranges::empty
(открытая функция-элемент класса std::ranges::view_interface<D>)
возвращает первый элемент в производном представлении, предоставляется если оно удовлетворяет forward_range
(открытая функция-элемент класса std::ranges::view_interface<D>)
возвращает последний элемент в производном представлении, предоставляется только если оно удовлетворяет bidirectional_range и common_range
(открытая функция-элемент класса std::ranges::view_interface<D>)
возвращает n-й элемент в производном представлении, предоставляется только если оно удовлетворяет random_access_range
(открытая функция-элемент класса std::ranges::view_interface<D>)

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

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

(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]

Смотрите также

представление, view чей M -й элемент является view над M -м по (M + N - 1) -й элементы другого view
(шаблон класса) (объект адаптера диапазона)
диапазон view 'ов , которые являются N -размерными неперекрывающимися последовательными фрагментами элементов другого view
(шаблон класса) (объект адаптера диапазона)
представление, view состоящее из кортежей ссылок на смежные элементы адаптированного представления
(шаблон класса) (объект адаптера диапазона)
представление, view которое состоит из элементов range , удовлетворяющих предикату
(шаблон класса) (объект адаптера диапазона)