Namespaces
Variants

std::ranges:: views:: istream, std::ranges:: basic_istream_view, std::ranges:: istream_view, std::ranges:: wistream_view

From cppreference.net
Ranges library
Range adaptors
定义于头文件 <ranges>
template < std:: movable Val, class CharT,

class Traits = std:: char_traits < CharT > >
requires std:: default_initializable < Val > &&
/*stream-extractable*/ < Val, CharT, Traits >
class basic_istream_view

: public ranges:: view_interface < basic_istream_view < Val, CharT, Traits >>
(1) (C++20 起)
辅助模板
template < class Val >
using istream_view = ranges :: basic_istream_view < Val, char > ;
(2) (C++20 起)
template < class Val >
using wistream_view = ranges :: basic_istream_view < Val, wchar_t > ;
(3) (C++20 起)
定制点对象
namespace views {

template < class T >
constexpr /* 未指定 */ istream = /* 未指定 */ ;

}
(4) (C++20 起)
辅助概念
template < class Val, class CharT, class Traits >

concept /*stream-extractable*/ =
requires ( std:: basic_istream < CharT, Traits > & is, Val & t ) {
is >> t ;

} ;
(5) ( 仅用于阐释* )
1) 一个范围工厂,通过重复调用 operator >> 来生成元素序列。
2,3) 针对字符类型 char wchar_t 的便捷别名模板。
4) views :: istream < T > ( e ) 表达式等价性 上等同于 ranges :: basic_istream_view < T, typename U :: char_type , typename U :: traits_type > ( e ) ,其中 e 为任意适合的子表达式, U 定义为 std:: remove_reference_t < decltype ( e ) >
如果 U 未同时满足公开且明确地派生自 std:: basic_istream < typename U :: char_type , typename U :: traits_type > ,则程序非良构,这可能导致 替换失败
5) 仅用于阐述的概念 /*stream-extractable*/ < Val, CharT, Traits > 在满足以下条件时成立:类型为 Val 的左值可以从类型为 std:: basic_istream < CharT, Traits > 的左值中提取。

basic_istream_view 的迭代器类型是仅移动类型:它不满足 LegacyIterator 要求,因此无法与C++20之前的 algorithms 协同工作。

目录

定制点对象

名称 views::istream<T> 表示一个 定制点对象 ,它是一个常量 函数对象 ,具有 字面量 类型的 semiregular 类类型。详情参见 定制点对象

数据成员

成员 定义
std:: basic_istream < CharT, Traits > * stream_ 指向输入流的指针
( 仅用于说明的成员对象* )
Val value_ 存储的值
( 仅用于说明的成员对象* )

成员函数

构造 basic_istream_view
(公开成员函数)
返回迭代器
(公开成员函数)
返回 std::default_sentinel
(公开成员函数)
继承自 std::ranges::view_interface
(C++23)
返回指向范围起始的常量迭代器
( std::ranges::view_interface<D> 的公开成员函数)
(C++23)
返回范围常量迭代器的哨位
( std::ranges::view_interface<D> 的公开成员函数)

尽管 basic_istream_view 派生自 std::ranges::view_interface ,但它无法使用任何继承的成员函数。

(C++23 前)

std::ranges::basic_istream_view:: basic_istream_view

constexpr explicit
basic_istream_view ( std:: basic_istream < CharT, Traits > & stream ) ;
(C++20 起)

std:: addressof ( stream ) 初始化 stream_ ,并对 value_ 进行值初始化。

std::ranges::basic_istream_view:: begin

constexpr auto begin ( ) ;
(C++20 起)

等价于 * stream_ >> value_  ; return iterator  { * this } ;

std::ranges::basic_istream_view:: end

constexpr std:: default_sentinel_t end ( ) const noexcept ;
(C++20 起)

返回 std:: default_sentinel

嵌套类

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

示例

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <ranges>
#include <sstream>
#include <string>
int main()
{
    auto words = std::istringstream{"today is yesterday’s tomorrow"};
    for (const auto& s : std::views::istream<std::string>(words))
        std::cout << std::quoted(s, '/') << ' ';
    std::cout << '\n';
    auto floats = std::istringstream{"1.1  2.2\t3.3\v4.4\f55\n66\r7.7  8.8"};
    std::ranges::copy
    (
        std::views::istream<float>(floats),
        std::ostream_iterator<float>{std::cout, ", "}
    );
    std::cout << '\n';
}

输出: