Spec-Zone.ru › C++

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

Определено в заголовочном файле <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 как диапазон, являющийся только input_range, но не common_range.
2) Объект-адаптер диапазона. Пусть 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. В частности, оно не моделирует ни одну из следующих концепций:

  • forward_range
  • bidirectional_range
  • random_access_range
  • contiguous_range

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

Поля данных

Член Описание
V base_ (закрытый) базовое представление
(член-объект, используемый только для описания*)

Функции-члены

конструктор
создаёт as_input_view
(открытая функция-член)
base
возвращает копию базового (адаптированного) представления
(открытая функция-член)
begin
возвращает итератор на начало
(открытая функция-член)
end
возвращает итератор или сентинел на конец
(открытая функция-член)
size
возвращает количество элементов. Предоставляется, только если базовый (адаптированный) диапазон удовлетворяет требованиям sized_range.
(открытая функция-член)
Унаследовано от std::ranges::view_interface
empty
возвращает, является ли производное представление пустым; предоставляется, только если оно удовлетворяет требованиям sized_range или forward_range
(открытая функция-член std::ranges::view_interface<D>)
cbegin
(C++23)
возвращает константный итератор на начало диапазона
(открытая функция-член std::ranges::view_interface<D>)
cend
(C++23)
возвращает сентинел для константного итератора диапазона
(открытая функция-член std::ranges::view_interface<D>)
operator bool
возвращает, не является ли производное представление пустым; предоставляется, только если к нему применим ranges::empty
(открытая функция-член std::ranges::view_interface<D>)
data
получает адрес данных производного представления; предоставляется, только если тип его итератора удовлетворяет требованиям contiguous_iterator
(открытая функция-член std::ranges::view_interface<D>)
front
возвращает первый элемент производного представления; предоставляется, если оно удовлетворяет требованиям forward_range
(открытая функция-член std::ranges::view_interface<D>)
back
возвращает последний элемент производного представления; предоставляется, только если оно удовлетворяет требованиям bidirectional_range и common_range
(открытая функция-член std::ranges::view_interface<D>)
operator[]
возвращает элемент с индексом 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 - представление

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)

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

iterator
тип итератора
(вложенный шаблон класса, используемый только для описания*)

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

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 может быть полезно для устранения накладных расходов, необходимых для поддержки операций, требуемых для более сильных итераторов.

Макрос проверки функциональности Значение Стандарт Функциональность
__cpp_lib_ranges_as_input 202502L (C++26) std::ranges::as_input_view

Пример

См. также

ranges::input_range
(C++20)
определяет диапазон, тип итератора которого удовлетворяет требованиям input_iterator
(концепция)
ranges::common_viewviews::common
(C++20)
преобразует view в common_range
(шаблон класса) (объект-адаптер диапазона)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/as_input_view

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API