我正在这样编写我的文件:
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_iterator
或 std::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/