繁体   English   中英

使用 C++ 将 integer 向量写入二进制文件的更快方法?

[英]Faster way to write an integer vector to a binary file with C++?

我目前有以下将vector<int>对象写入二进制文件的方法。

void save_config(std::string fname, std::vector<int> config) {
    std::ofstream out(fname);
    for (auto&& item : config)
        out << item;
}

然而,我需要保存的数据大约为 60 MB,使用此 function 写入大约需要 5 秒。 此外,我必须为我正在运行的算法的每次迭代编写一个二进制文件,并且生成这个数量级数据的输入大小的单次迭代可能大约是 500 毫秒。

我可以掩盖算法执行时间后面的写入时间,但是,由于运行时的这种差异,这并不重要。 有什么办法可以改进我的save_config function? 另外,我使用的是二进制文件,因为我已经准备好它是最快的写入格式; 但具体格式并不重要,如果有人有其他建议,我很乐意听到。

它是否会导致明显更快的操作必须进行测试,但是下面使用write() function避免了遍历向量:

#include <fstream>
#include <vector>

void save_config(std::string fname, std::vector<int> config)
{
    std::ofstream out(fname, std::ios_base::binary);
    uint64_t size = config.size();
    out.write(reinterpret_cast<char*>(&size), sizeof(size));
    out.write(reinterpret_cast<char*>(config.data()), size * sizeof(int));
}

请注意,我还包括一个“前缀”来记录向量的大小,以便以后从文件中读取数据时可以确定; 为此,我使用了固定大小的类型(64 位)以避免具有 32 位size_t类型的平台可能出现的问题(您也许应该考虑使用固定大小的 integer 类型,例如int32_t ,以避免类似的问题)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM