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) | |
| Вспомогательные шаблоны |
||
stride_view — это адаптер диапазона, который принимает view и число n и создаёт представление, состоящее из элементов исходного представления, продвигаясь на n элементов за раз. Это означает, что каждый m-й элемент созданного представления является (n * i)-м элементом исходного представления для некоторого неотрицательного индекса i.
Элементы исходного представления, чей «индекс» не кратен n, отсутствуют в созданном представлении.S — размер исходного представления. Тогда размер созданного представления равен:
(S / n) + (S % n ? 1 : 0), еслиS >= n; в противном случае,1, еслиS > 0; в противном случае,0, и результирующее представление пусто.
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
(публичная функция-член) |
|
|
(C++26)
|
возвращает приблизительный размер результирующего
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
>>
=
|
(начиная с 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]
Смотрите также
|
(C++23)
|
представление,
view
чей M
-й
элемент является
view
над M
-м
по (M + N - 1)
-й
элементы другого
view
(шаблон класса) (объект адаптера диапазона) |
|
(C++23)
|
диапазон
view
'ов
, которые являются
N
-размерными неперекрывающимися последовательными фрагментами элементов другого
view
(шаблон класса) (объект адаптера диапазона) |
представление,
view
состоящее из кортежей ссылок на смежные элементы адаптированного представления
(шаблон класса) (объект адаптера диапазона) |
|
представление,
view
которое состоит из элементов
range
, удовлетворяющих предикату
(шаблон класса) (объект адаптера диапазона) |