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:Tудовлетворяет input_range,Tне удовлетворяет common_range, иTне удовлетворяет forward_range.
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
|
Пример
| Этот раздел неполон Причина: нет примера |
См. также
(C++20) |
определяет диапазон, тип итератора которого удовлетворяет input_iterator (концепция) |
| преобразует view в common_range (шаблон класса) (объект-адаптер диапазона) |