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_iterator当然のことながら、 orを使用して 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 に答える