Namespaces
Variants

std::ranges::subrange<I,S,K>::subrange

Источник: ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
subrange() requires std::default_initializable<I> = default;
(1) (начиная с C++20)
constexpr subrange( /*convertible-to-non-slicing*/<I> auto i, S s )
    requires (!/*StoreSize*/);
(2) (начиная с C++20)
constexpr subrange( /*convertible-to-non-slicing*/<I> auto i, S s,
                    /*make-unsigned-like-t*/<std::iter_difference_t<I>> n )
    requires (K == ranges::subrange_kind::sized);
(3) (начиная с C++20)
template< /*different-from*/<subrange> R >
    requires ranges::borrowed_range<R> &&
             /*convertible-to-non-slicing*/<ranges::iterator_t<R>, I> &&
             std::convertible_to<ranges::sentinel_t<R>, S>
constexpr subrange( R&& r )
    requires (!/*StoreSize*/ || ranges::sized_range<R>);
(4) (начиная с C++20)
template< ranges::borrowed_range R>
    requires /*convertible-to-non-slicing*/<ranges::iterator_t<R>, I> &&
           std::convertible_to<ranges::sentinel_t<R>, S>
constexpr subrange( R&& r,
                    /*make-unsigned-like-t*/<std::iter_difference_t<I>> n )
    requires (K == ranges::subrange_kind::sized)
    : subrange{ranges::begin(r), ranges::end(r), n} {}
(5) (начиная с C++20)

Создаёт subrange.

Определения /*make-unsigned-like-t*/ и /*different-from*/ см. в make-unsigned-like-t и different-from соответственно.

 Перегрузка  Элементы данных
begin_ end_ size_
(только если StoreSize равно true)
(1) инициализирован значением инициализирован значением инициализирован с помощью 0
(2) инициализирован с помощью std::move(i) инициализирован с помощью s нет
(3) инициализирован с помощью n
(4) инициализирован с помощью std::move(ranges::begin(r)) инициализирован с помощью ranges::end(r) инициализирован с помощью static_cast<decltype(size_ )>
    (ranges::size(r))
(5) инициализирован с помощью n
2) Если [i, s) не является допустимым диапазоном, поведение не определено.
3) Если выполняется любое из следующих условий, поведение не определено:
  • [i, s) не является допустимым диапазоном.
  • n == to-unsigned-like (ranges::distance(i, s)) равно false.

Параметры

i - итератор, обозначающий начало диапазона
s - страж, обозначающий конец диапазона
r - диапазон
n - подсказка размера, должна быть равна размеру диапазона

Пример

Отчёты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
P2393R1 C++20 для перегрузки ( 4 ) , size_ может инициализироваться с помощью ranges:: size ( r ) , но оно
не всегда неявно преобразуется в соответствующий unsigned-integer-like тип
преобразование сделано
явным