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) |
view как диапазон, являющийся только input_range, но не common_range.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. (открытая функция-член) |
|
Унаследовано от |
|
возвращает, является ли производное представление пустым; предоставляется, только если оно удовлетворяет требованиям 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) |
base_ значением по умолчанию с помощью инициализатора его члена по умолчанию (= V()).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) |
return base_;.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) |
return /*iterator*/<false>(ranges::begin(base_));
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) |
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) |
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 может быть полезно для устранения накладных расходов, необходимых для поддержки операций, требуемых для более сильных итераторов.
| Макрос проверки функциональности | Значение | Стандарт | Функциональность |
|---|---|---|---|
__cpp_lib_ranges_as_input | 202502L | (C++26) |
std::ranges::as_input_view |
Пример
См. также
|
(C++20) | определяет диапазон, тип итератора которого удовлетворяет требованиям input_iterator (концепция) |
|
(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