std::ranges:: views:: stride, std::ranges:: stride_view
|
Определено в заголовочном файле
<ranges>
|
||
|
template
<
ranges::
input_range
V
>
requires
ranges::
view
<
V
>
|
(1) | (начиная с C++23) |
|
namespace
views
{
inline
constexpr
/* неспецифицировано */
stride
=
/* неспецифицировано */
;
|
(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 /*адаптер диапазона-замыкание*/ stride ( DifferenceType && n ) ; |
(начиная с C++23) | |
|
Вспомогательные шаблоны
|
||
stride_view
— это адаптер диапазона, который принимает
view
и число
n
и создает представление, состоящее из элементов исходного представления путем продвижения на
n
элементов за раз. Это означает, что каждый
m
th
элемент результирующего представления является
(n * i)
th
элементом исходного представления для некоторого неотрицательного индекса
i
.
Элементы исходного представления, "индекс" которых не кратен
n
, отсутствуют в результирующем представлении.
S
будет размером исходного представления. Тогда размер созданного представления равен:
- ( S / n ) + ( S % n ? 1 : 0 ) , если S >= n ; иначе,
- 1 , если S > 0 ; иначе,
- 0 , и результирующее представление пусто.
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
(публичная функция-член) |
Наследуется от std::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
, удовлетворяющих предикату
(шаблон класса) (объект адаптера диапазона) |