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

时间:2015-05-27 18:38:43

标签: 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不是一个选项。

1 个答案:

答案 0 :(得分:3)

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

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

但是,这有点不安全,因为即使流耗尽,它也会继续尝试读取。如果您对此感兴趣,那么您将不得不使用较低级别的构造,如基本for循环,或者具有更高级范围处理功能的库,如Eric Niebler的优秀range library