basic_istream_view 类(C++ 标准库)

输入流中连续元素的视图。

语法

template<movable Val, class CharT, class Traits>
    requires default_initializable<Val> &&
    stream_extractable <Val, CharT, Traits>
class basic_istream_view : public view_interface<basic_istream_view<Val, CharT, Traits>>;

模板参数

CharT
流的字符类型。

Traits
可选。 提供以下详细信息:有关比较字符的流的字符类型、确定由该字符类型构成的字符串长度等内容。 一个示例特征是char_traits<wchar_t>。 如果未指定,默认为char_traits<CharT>

Val
要提取的元素的类型。 例如,double(给定流:"1.1 2.2 3.3"

stream_extractable指的是可使用operator>>函数从流中提取类型Val的要求(概念)。 它等效于:

template<class Val, class CharT, class Traits>
concept stream_extractable =
  requires(std::basic_istream<CharT,Traits>& is, Val& t) {
    is >> t;
  };

视图特征

有关下列条目的说明,请参阅视图类特征

特征 说明
范围适配器 istream
基础范围
元素类型 Val相同
视图迭代器类别 input_range
已设置大小
const 可迭代
常见范围
借入范围

专用化:istream_viewwistream_view

charwchar_t流提供了方便的别名模板,如下所示:

1) template<class Val>
using istream_view = ranges::basic_istream_view<Val, char>;

2) template<class Val>
using wistream_view = ranges::basic_istream_view<Val, wchar_t>;

1) 从由char字符组成的输入流中读取元素。
2) 从由wchar_t字符组成的输入流中读取元素。

对于 1) 和 2),Val指的是要提取的元素类型。 例如,Valdouble(给定流:"1.1 2.2 3.3"

成员

成员函数 描述
构造函数C++20 构造 basic_istream_view
beginC++20 读取第一个值并获取视图的迭代器。
endC++20 返回 std::default_sentinel

未从view_interface中继承任何成员函数。

要求

标头: <ranges> (自C++20以来)

命名空间std::ranges

编译器选项:/std:c++20或更高版本是必需的。

构造函数

构造 basic_istream_view 的实例。

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

参数

stream
要从其中进行读取的流。

有关模板参数类型的信息,请参阅模板参数

返回值

一个 basic_istream_view 实例。 basic_istream_view内部流指针初始化为addressof(stream)

注解

创建 basic_istream_view 的最佳方法是使用 views::istream 范围适配器。 范围适配器是创建视图类的预期方法。 如果要创建自己的自定义视图类型,会公开视图类型。

示例:basic_istream_viewistream_viewwistream_view

// requires /std:c++20, or later
#include <ranges>
#include <iostream>
#include <sstream>

int main()
{
    // range adaptor
    std::istringstream streamOfdoubles{ "1.1 2.2 3.3 4.4 5.5" };
    for (const auto& elem : std::views::istream<double>(streamOfdoubles))
    {
        std::cout << elem << ' '; // 1.1 2.2 3.3 4.4 5.5
    }
    std::cout << '\n';

    // range adaptor - create a wistream_view
    std::wistringstream streamOfInts{ L"1 2 3 4 5" };
    for (const auto& elem : std::views::istream<int>(streamOfInts))
    {
        std::cout << elem << ' '; // 1 2 3 4 5
    }
    std::cout << '\n';

    // istream_view alias
    std::istringstream cpu1{ "8 0 8 0" };
    // equivalent std::ranges::istream_view<int, char>
    for (const auto& elem : std::ranges::istream_view<int>{cpu1})
    {
        std::cout << elem; // 8080
    }
    std::cout << '\n';

    // wistream_view alias
    std::wistringstream cpu2{ L"6 5 0 2" };
    // equivalent std::ranges::istream_view<int, wchar_t>
    for (const auto& elem : std::ranges::wistream_view<int>{cpu2})
    {
        std::cout << elem; // 6502
    }
    std::cout << '\n';

    // specify all template arguments
    std::wistringstream misc(L"S T L");
    std::ranges::basic_istream_view<wchar_t, wchar_t, std::char_traits<wchar_t>> basic{misc};
    for (const auto& elem : basic)
    {
        std::wcout << elem << ' '; // S T L
    }
}
1.1 2.2 3.3 4.4 5.5
1 2 3 4 5
8080
6502
S T L

begin

读取第一个值并获取视图的迭代器。

constexpr auto begin();

参数

无。

返回值

指向 basic_istream_view 中的第一个元素的迭代器。

end

获取视图末尾的 sentinel。

constexpr std::default_sentinel_t end() const noexcept;

参数

无。

返回值

default_sentinel_t

另请参阅

<ranges>
视图类