![](/img/trans.png)
[英]std::mutiset vs std::vector to read and write sorted strings to a file
[英]Read file into std::vector<std::byte>
我正在嘗試將二進制格式的文件讀入std::vector<std::byte>
std::ifstream fStream(fName, std::ios::binary);
std::vector<std::byte> file_content((std::istreambuf_iterator<std::byte>(fStream)),
std::istreambuf_iterator<std::byte>());
但我收到此錯誤(在我看來istreambuf_iterator
缺少std::byte
的重載)
error: no matching function for call to ‘std::istreambuf_iterator<std::byte>::istreambuf_iterator(std::ifstream&)’
std::vector<std::byte> file_content((std::istreambuf_iterator<std::byte>(fStream)),
我做錯了什么嗎? 如果是的話,最好的方法是什么?
謝謝!
我正在嘗試將二進制格式的文件讀入
std::vector<std::byte>
您正在使用std::istream_iterator
,它使用operator>>
從std::istream
讀取,默認情況下執行格式化讀取而不是二進制讀取。 使用std::istream::read()
讀取二進制數據。
如果要使用std::istring_iterator
讀取字節,則需要定義調用std::istream::read()
或std::stream::get()
的自定義operator>>
。 但這將是低效的,因為它一次讀取 1 個字節。 最好直接調用read()
讀取多個字節的塊。 例如,查詢文件大小,將std::vector
預分配到該大小,然后從std::ifstream
直接read()
到該大小的std::vector
中。
更新:我剛剛注意到您使用的是std::istreambuf_iterator
而不是std::istream_iterator
。 std::istreambuf_iterator
不使用operator>>
,因此它更適合讀取字節。 但是,它仍然一次讀取 1 個字節,所以我所說的使用std::istream::read()
讀取多個字節仍然適用。
你應該可以這樣做:
std::basic_ifstream<std::byte> fStream{fName, std::ios::binary};
std::vector<std::byte> file_content{ std::istreambuf_iterator<std::byte>(fStream), {} };
不幸的是,在STL 中只實現了字符迭代器,所以
std::istreambuf_iterator<std::byte>
會導致錯誤。 所以用
std::istreambuf_iterator<char>
相反。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.