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_view
和wistream_view
为char
和wchar_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
指的是要提取的元素类型。 例如,Val
是double
(给定流:"1.1 2.2 3.3"
)
成员
成员函数 | 描述 |
---|---|
构造函数C++20 | 构造 basic_istream_view 。 |
begin C++20 |
读取第一个值并获取视图的迭代器。 |
end C++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_view
、istream_view
和wistream_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