3 回答

TA貢獻1776條經驗 獲得超12個贊
規范形式是這樣的:
#include<iterator>
// ...
std::ifstream testFile("testfile", std::ios::binary);
std::vector<char> fileContents((std::istreambuf_iterator<char>(testFile)),
std::istreambuf_iterator<char>());
如果您擔心重新分配,請在向量中保留空間:
#include<iterator>
// ...
std::ifstream testFile("testfile", std::ios::binary);
std::vector<char> fileContents;
fileContents.reserve(fileSize);
fileContents.assign(std::istreambuf_iterator<char>(testFile),
std::istreambuf_iterator<char>());

TA貢獻1784條經驗 獲得超7個贊
如果要進行真正的零拷貝讀取,也就是說,要消除從內核到用戶空間的復制,只需將文件映射到內存即可。編寫自己的映射文件包裝器,或使用中的一個boost::interprocess
。

TA貢獻1859條經驗 獲得超6個贊
如果我對您的理解正確,那么您想閱讀每個元素,但又不想將所有元素都加載到fileContents
,對嗎?我個人認為這不會產生不必要的副本,因為多次打開文件會進一步降低性能。fileContents
在這種情況下,一次讀入向量是一個合理的解決方案。
- 3 回答
- 0 關注
- 1269 瀏覽
添加回答
舉報