我想将二进制文件读入向量。一切似乎都工作正常,因为所有值都有正确的值。
除了二进制值/数据未输入到
data
或者更确切地说 data
未填充。
void loadDataFromFile(const std::string& filePath, std::vector<DataArray>& data)
{
std::ifstream inFile(filePath, std::ios::binary);
if (!inFile) {
std::cerr << "Error opening file!" << std::endl;
}
// Get the size of the file
inFile.seekg(0, std::ios::end);
std::streamsize file_size = inFile.tellg();
inFile.seekg(0, std::ios::beg);
constexpr std::size_t bufferSize = 700 * 1024 * 1024; // 700 MB buffer size (adjust as needed)
std::size_t elementSize = sizeof(DataArray);
std::size_t elementsPerBuffer = bufferSize / elementSize;
std::size_t totalElements = file_size / elementSize;
data.reserve(totalElements);
std::size_t offset = 0;
while (offset < totalElements) {
std::size_t count = std::min(elementsPerBuffer, totalElements - offset);
inFile.read(reinterpret_cast<char*>(&data[offset]), count * elementSize);
offset += count;
}
inFile.close();
}
在这一行中:
data.reserve(totalElements);
std::vector::reserve
将会:
增加向量的容量(向量的元素总数) 该向量可以在不需要重新分配的情况下保持为一个值 大于或等于 new_cap。
size
的实际 vector
不会改变,访问索引 >= 当前大小的元素将调用未定义行为。
相反,由于您想用
totalElements
元素填充向量,因此您应该调用:
data.resize(totalElements);