显然,C++20 有一个新的与 std::istream
相关的构造: std::istream_view
。 关于它的cppreference页面现在是个草稿。那么,“istream的视图”是什么,我可以用它来做什么?
† - 好吧,技术上它重定向到一个关于std::basic_istream_view
的页面,而这个页面是个草稿。
显然,C++20 有一个新的与 std::istream
相关的构造: std::istream_view
。 关于它的cppreference页面现在是个草稿。那么,“istream的视图”是什么,我可以用它来做什么?
† - 好吧,技术上它重定向到一个关于std::basic_istream_view
的页面,而这个页面是个草稿。
std::istream_view<T>
是一个范围,更具体地说,是由一个视图形成的范围。这个标准库中的新增功能类似于你可能在std::ranges::views
下找到的 - 不同之处在于它不是任意范围的视图,而是std::istream
的视图。std::istream
进行什么样的“视图”处理呢?回想一下,istream
是一个字符流,而不是您选择的任意T
类型的元素流。将这些字符延迟解析为连续的T
的应用就是对流的“视图”处理。也就是说,std::istream_view<T>(is)
的第k个元素是您运行is >> t
(其中t
是T
类型)第k次得到的内容。std::istream_view
(小心使用),而不是首先以更加“老派”的方式将输入解析为某个数据结构,然后将该结构作为范围进行处理。std::istream_view
的看法:
T
形式的协程等效物; 有关详细信息,请阅读此答案(请注意,它是关于ranges-v3中的istream视图的,其中大部分成为了标准ranges库)。std::istream_iterator<T>
包装在C++20视图界面中的结果。
istream_iterator<T>
。 - Nicol Bolas&
来获取迭代器的吗?为什么?我发现大多数(如果不是全部)人都在到处复制迭代器。调用一个执行一些find_if
操作的all_of
函数,就会产生N^2次复制。你不使用<algorithm>
吗?所有这些东西都会复制迭代器。 - Fureeish