我正在写这样的文件:
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
不是一个选项。
答案 0 :(得分:3)
您可以使用std::copy_n
代替std::copy
。
std::copy_n(ii, 5, vec.begin());
但是,这有点不安全,因为即使流耗尽,它也会继续尝试读取。如果您对此感兴趣,那么您将不得不使用较低级别的构造,如基本for循环,或者具有更高级范围处理功能的库,如Eric Niebler的优秀range library。