Namespaces
Variants

std::ranges:: views:: to_input, std::ranges:: to_input_view

From cppreference.net
Ranges library
Range adaptors
定义于头文件 <ranges>
template < ranges:: input_range V >

requires ranges:: view < V >
class to_input_view

: public ranges:: view_interface < to_input_view < V >>
(1) (C++26 起)
namespace views {

inline constexpr /* 未指定 */ to_input = /* 未指定 */ ;

}
(2) (C++26 起)
调用签名
template < ranges:: viewable_range R >

requires /* 见下文 */

constexpr ranges:: view auto to_input ( R && r ) ;
(C++26 起)
1) 一种范围适配器,将底层 view 表示为仅支持 input_range 且非 common_range 的视图。
2) RangeAdaptorObject 。令 e 为子表达式, T decltype ( e ) 。则表达式 views :: to_input ( e ) 与下列表达式 表达式等价

因此, to_input_view 永远不会建模比 input_range 更强的范围概念。具体而言,它不会建模以下所有概念:

此外, to_input_view 并不模拟 common_range 。然而,当底层视图 V 满足相应概念时,它确实模拟 borrowed_range constant_range sized_range

目录

数据成员

成员 描述
V base_ (私有) 底层视图
( 仅用于说明的成员对象* )

成员函数

构造 to_input_view
(公开成员函数)
返回底层(适配的)视图的副本
(公开成员函数)
返回指向起始位置的迭代器
(公开成员函数)
返回指向末尾位置的迭代器或哨兵
(公开成员函数)
返回元素数量。仅当底层(适配的)范围满足 sized_range 时提供
(公开成员函数)
继承自 std::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::to_input_view:: to_input_view

to_input_view ( ) requires std:: default_initializable < V > = default ;
(1) (since C++26)
constexpr explicit to_input_view ( V base ) ;
(2) (since C++26)
1) 通过其默认成员初始化器( = V ( ) )值初始化 base_
2) 使用 std :: move ( base ) 初始化 base_

参数

base - 视图

std::ranges::to_input_view:: base

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

std::ranges::to_input_view:: begin

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

std::ranges::to_input_view:: end

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

std::ranges::to_input_view:: size

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

推导指引

template < class R >
to_input_view ( R && ) - > to_input_view < views:: all_t < R >> ;
(C++26 起)

嵌套类

迭代器类型
( 仅用于说明的成员类模板* )

辅助模板

template < class T >

constexpr bool enable_borrowed_range < std :: ranges :: to_input_view < T >> =

ranges:: enable_borrowed_range < T > ;
(C++26 起)

std :: ranges:: enable_borrowed_range 的特化使得当底层视图满足 borrowed_range 时, to_input_view 也能满足该概念。

注释

to_input_view 可用于避免为提供更强迭代器强度所需操作支持而产生的开销。

功能测试 标准 功能
__cpp_lib_ranges_to_input 202502L (C++26) std::ranges::to_input_view

示例

参见

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