Namespaces
Variants

std::ranges::views::as_input, std::ranges::as_input_view

с ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
Определён в заголовочном файле <ranges>
template< ranges::input_range V >
    requires ranges::view<V>
class as_input_view
    : public ranges::view_interface<as_input_view<V>>
(1) (начиная с C++26)
namespace views {
    inline constexpr /* unspecified */ as_input = /* unspecified */;
}
(2) (начиная с C++26)
Сигнатура вызова
template< ranges::viewable_range R >
    requires /* see below */
constexpr ranges::view auto as_input( R&& r );
(начиная с C++26)
1) Адаптер диапазона, который представляет представление (view) нижележащего view как input_range-only и не как common_range.
2) RangeAdaptorObject. Пусть e будет подвыражением, и пусть T будет decltype(e). Тогда выражение views::as_input(e) является выражением-эквивалентным:
  • views::all(e), если это хорошо сформированное выражение и все нижеприведённые условия являются true:
  • as_input_view{e} в противном случае.

Следовательно, as_input_view никогда не удовлетворяет концепциям диапазонов, которые являются более сильными, чем input_range. В частности, он не удовлетворяет ни одному из следующих:

Кроме того, as_input_view не удовлетворяет common_range. Однако он удовлетворяет borrowed_range, constant_range и sized_range, если нижележащее представление V удовлетворяет соответствующим концепциям.

Элементы данных

Элемент Описание
V base_ (приватный) нижележащее представление
(экспонируемый только для пояснения объект-элемент*)

Функции-элементы

создаёт as_input_view
(открытая функция-элемент)
возвращает копию нижележащего (адаптированного) представления
(открытая функция-элемент)
возвращает итератор на начало
(открытая функция-элемент)
возвращает итератор или дозорный на конец
(открытая функция-элемент)
возвращает количество элементов. Предоставляется только если нижележащий (адаптированный) диапазон удовлетворяет 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>)
получает адрес данных производного представления, предоставляется только если тип его итератора удовлетворяет contiguous_iterator
(открытая функция-элемент 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>)

std::ranges::as_input_view::as_input_view

as_input_view() requires std::default_initializable<V> = default;
(1) (начиная с C++26)
constexpr explicit as_input_view( V base );
(2) (начиная с C++26)
1) Инициализирует значением base_ через его инициализатор элемента по умолчанию (= V()).
2) Инициализирует base_ с помощью std::move(base).

Параметры

base - представление (view)

std::ranges::as_input_view::base

constexpr V base() const& requires std::copy_constructible<V>;
(1) (начиная с C++26)
constexpr V base() &&;
(2) (начиная с C++26)
1) Копирующим конструктором создаёт результат из нижележащего представления. Эквивалентно return base_;.
2) Перемещающим конструктором создаёт результат из нижележащего представления. Эквивалентно return std::move(base_);.

std::ranges::as_input_view::begin

constexpr auto begin() requires (!__simple_view<V>);
(1) (начиная с C++26)
constexpr auto begin() const requires ranges::range<const V>;
(2) (начиная с C++26)
1) Эквивалентно return /*iterator*/<false>(ranges::begin(base_));
2) Эквивалентно return /*iterator*/<true>(ranges::begin(base_));

std::ranges::as_input_view::end

constexpr auto end() requires (!__simple_view<V>);
(1) (начиная с C++26)
constexpr auto end() const requires ranges::range<const V>;
(2) (начиная с C++26)
1,2) Эквивалентно return ranges::end(base_);

std::ranges::as_input_view::size

constexpr auto size() requires ranges::sized_range<V>;
(1) (начиная с C++26)
constexpr auto size() const requires ranges::sized_range<const V>;
(2) (начиная с C++26)
1,2) Эквивалентно return ranges::size(base_);

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

template< class R >
as_input_view( R&& ) -> as_input_view<views::all_t<R>>;
(начиная с C++26)

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

тип итератора
(экспонируемый только для пояснения шаблон класса-элемента*)

Вспомогательные шаблоны

template< class T >
constexpr bool enable_borrowed_range<std::ranges::as_input_view<T>> =
    ranges::enable_borrowed_range<T>;
(начиная с C++26)

Эта специализация std::ranges::enable_borrowed_range делает as_input_view удовлетворяющим borrowed_range, когда нижележащее представление удовлетворяет ему.

Примечания

as_input_view может быть полезен для избежания накладных расходов, необходимых для поддержки операций, требующихся для большей сильной категории итераторов.

Макрос проверки возможности Значение Std Возможность
__cpp_lib_ranges_as_input 202502L (C++26) std::ranges::as_input_view

Пример

См. также

определяет диапазон, тип итератора которого удовлетворяет input_iterator
(концепция)
преобразует view в common_range
(шаблон класса) (объект-адаптер диапазона)