c++ - 有没有办法使用istreambuf_iterator读取特定长度?

标签 c++ stl istream-iterator

我正在这样编写我的文件:

std::ofstream os; // declared somewhere earlier
std::vector<char> vec; // declared somewhere earlier

std::ostreambuf_iterator<char> oi(os);
std::copy(vec.begin(), vec.end(), oi);

很自然地,我想知道是否有类似的方法来使用 std::istream_iteratorstd::istreambuf_iterator 读取 5 个字节,但是因为它们不这样做不支持 operator+ 我似乎不知道如何实现这一点。

例如,我想象了一个与此接近的解决方案:

std::istream_iterator<char> ii(file);
std::copy(ii, ii + 5, vec.begin());

在 C++14 中有什么办法可以做到这一点吗?

PS:我想要一个使用 STL 的解决方案,因此不能使用 boost

最佳答案

您可以使用 std::copy_n 代替 std::copy

std::copy_n(ii, 5, vec.begin());

但是,这有点不安全,因为即使流耗尽它也会继续尝试读取。如果您担心这一点,那么您要么必须使用较低级别的构造(例如基本的 for 循环),要么使用具有更高级范围处理功能的库,例如 Eric Niebler 的优秀 range library .

关于c++ - 有没有办法使用istreambuf_iterator读取特定长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30490564/

相关文章:

java - 从控制台启动的 Android 应用程序

c++ - constexpr、数组和初始化

C++去除空格

c++ - <algorithm>中make_heap()函数的算法

c++ - 简单的 istream_iterator 问题

C++/CX 从绝对 url 读取文件

c++ - 从 C++ dll 回调到 delphi 应用程序

c++ - unordered_multimap - 迭代 find() 的结果会产生具有不同值的元素

c++ - istream_iterator 复制示例一直等待输入

c++ - istream_iterator,黑魔法?