gpt4 book ai didi

c++ - 将大量数字 vector 保存到硬盘驱动器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:31:27 26 4
gpt4 key购买 nike

我使用 unsigned short 类型的 vector 在 RAM 中分配了一大块连续字节。

vector<unsigned short> testDump(204800000);

for(int k = 0; k<204800000; k++)
testDump[k] = 9; \\ This is different in my real program

现在我想将这个 vector 保存到我的硬盘驱动器中。如何以及最快的方法是什么?数据量相当大 (~1/2 GB)。我尝试了以下方法:

ofstream outfile("allMyNumbers.txt", ios::out | ios::binary);
outfile.write(&testDump[0], testDump.size());

但我收到以下错误:

cannot convert parameter 1 from 'unsigned short *' to 'const char *'

完成我的任务(即使用最快的方法将 vector 保存到文件)的最快方法是什么?

*平台为Windows 7。

最佳答案

可以直接转换指针。

outfile.write(reinterpret_cast<char*>(&testDump[0]), testDump.size() * sizeof(unsigned short));

请注意,生成的文件的格式是特定于您的特定平台/实现的。所以你不一定能在不兼容的机器上以明显的方式读回它。

在 Windows 上,这将为您提供一个 400MB 左右的文件,其中 204800000 对字节中的每一对都代表一个小端字节序的无符号短整型。

这应该相当快。我发现很难相信您的任务真的是“使用最快的方法”保存数据。怎么会有人知道你的代码真的是最优的,没有其他代码可以快一纳秒呢?付出额外的努力来缩短纳秒的意义何在?等等。

当然,使用快速流式压缩算法来减少所需的磁盘空间可能会更快,因为该操作可能会受到磁盘 I/O 的限制。但是代码会复杂得多,它是否有帮助取决于数据的可压缩性。

关于c++ - 将大量数字 vector 保存到硬盘驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com