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 关注
- 1224 浏览
添加回答
举报