Namespaces
Variants

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

来自 zh.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 表示为仅满足 input_range 且不满足 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_rangeV。

数据成员

成员 描述
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>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 (1)

as_input_view() requires std::default_initializable<V> = default;
(C++26 起) (2)
constexpr explicit as_input_view( V base );
(C++26 起) 1)
通过其默认成员初始化器对 进行值初始化(base_)。= V()2)
使用 初始化 base_。std::move(base)参数

base

- 一个视图 std::ranges::as_input_view::

base (1)

constexpr V base() const& requires std::copy_constructible<V>;
(C++26 起) (2)
constexpr V base() &&;
(C++26 起) 1)
从底层视图复制构造结果。等价于 。return base_;2)
从底层视图移动构造结果。等价于 。return std::move(base_);std::ranges::as_input_view::

begin (1)

constexpr auto begin() requires (!__simple_view<V>);
(C++26 起) (2)
constexpr auto begin() const requires ranges::range<const V>;
(C++26 起) 1)
等价于 2)return /*iterator*/<false>(ranges::begin(base_));
等价于 std::ranges::as_input_view::return /*iterator*/<true>(ranges::begin(base_));

end (1)

constexpr auto end() requires (!__simple_view<V>);
(C++26 起) (2)
constexpr auto end() const requires ranges::range<const V>;
(C++26 起) 1,2)
等价于 std::ranges::as_input_view::return ranges::end(base_);

size (1)

constexpr auto size() requires ranges::sized_range<V>;
(C++26 起) (2)
constexpr auto size() const requires ranges::sized_range<const V>;
(C++26 起) 1,2)
等价于 推导指引return ranges::size(base_);

(C++26 起)

template< class R >
as_input_view( R&& ) -> as_input_view<views::all_t<R>>;
嵌套类

iterator

(
仅用于阐释的成员类模板*)辅助模板

(C++26 起)

template< class T >
constexpr bool enable_borrowed_range<std::ranges::as_input_view<T>> =
    ranges::enable_borrowed_range<T>;
此

的特化使得当底层视图满足 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

示例

参阅

指定一个范围,其迭代器类型满足 input_iterator
(概念)
将 view 转换为 common_range
(类模板) (范围适配器对象)