2

我正在这样写我的文件:

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_iteratoror的 5 个字节std::istreambuf_iterator,但是由于它们不支持operator+我似乎无法弄清楚如何实现这一点。

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

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

有没有办法在 C++14 中做到这一点?

PS:我想要一个使用 STL 的解决方案,所以使用boost不是一个选项。

4

1 回答 1

3

您可以使用std::copy_n而不是std::copy.

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

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

于 2015-05-27T18:46:27.383 回答