Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <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 /* неспецифицировано */ 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)
Вспомогательные шаблоны
1) 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 , и результирующее представление пусто.
2) Имя views :: stride обозначает RangeAdaptorObject . Для подвыражений 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
(публичная функция-член)
(C++23)
возвращает сохраненное значение шага
(публичная функция-член)
возвращает копию базового (адаптированного) представления
(публичная функция-член)
возвращает итератор на начало
(публичная функция-член)
возвращает итератор или страж на конец
(публичная функция-член)
возвращает количество элементов, предоставляется только если базовый (адаптированный) диапазон удовлетворяет sized_range
(публичная функция-член)
возвращает приблизительный размер результирующего 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 >> =

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 , удовлетворяющих предикату
(шаблон класса) (объект адаптера диапазона)