Я пишу мои файлы, как это:Есть ли способ использовать istreambuf_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);
Так naturaly мне было интересно, есть ли подобный способ читать, скажем, 5 байт, используя std::istream_iterator
или std::istreambuf_iterator
, однако, так как они не поддерживают operator+
Я не могу понять, как это сделать.
Например, я вообразил soludion близко к этому:
std::istream_iterator<char> ii(file);
std::copy(ii, ii + 5, vec.begin());
Есть ли способ сделать это в C++ 14?
PS: Я хочу решение с использованием STL, поэтому использование boost
не является вариантом.
ok, поэтому, если я правильно его получу, функция будет блокироваться, если не хватает байтов для чтения? Любопытно, что у моего потока будет гарантированное количество байтов, так что это не проблема. – tofiffe
@tofiffe: Нет, он не будет блокироваться. Он просто заполнит оставшиеся символы мусором. (на самом деле, я считаю, что он будет просто повторять последний успешно прочитанный персонаж снова и снова, хотя я не уверен, что это гарантировано). –
приятный, кажется, что это гораздо полезнее, чем я ожидал: D – tofiffe