我有一个大的矢量(10 ^ 9个元素)的字符,我想知道将这样的矢量写入文件的最快方法是什么.到目前为止,我一直在使用下一个代码:
vector<char> vs;
// ... Fill vector with data
ofstream outfile("nanocube.txt", ios::out | ios::binary);
ostream_iterator<char> oi(outfile, '\0');
copy(vs.begin(), vs.end(), oi);
Run Code Online (Sandbox Code Playgroud)
对于此代码,将所有数据写入文件大约需要两分钟.实际问题是:"我可以使用STL加快速度吗?"
Cha*_*via 23
要写入如此大量的数据(~1GB),您应该直接写入输出流,而不是使用输出迭代器.由于向量中的数据是连续存储的,因此这将起作用并且应该更快.
ofstream outfile("nanocube.txt", ios::out | ios::binary);
outfile.write(&vs[0], vs.size());
Run Code Online (Sandbox Code Playgroud)
ostream_iterator的构造函数的第二个参数存在轻微的概念错误。如果您不需要分隔符,它应该是 NULL 指针(尽管幸运的是,这将被隐式地处理),或者应该省略第二个参数。
但是,这意味着在写入每个字符后,代码需要检查指定分隔符的指针(这可能有点低效)。
我想,如果你想使用迭代器,也许你可以尝试ostreambuf_iterator。
其他选项可能包括使用 write() 方法(如果它可以处理这么大的输出,或者可能以块的形式输出),以及可能特定于操作系统的输出函数。