问题是我想在文件中保存float的2D向量。因为我不熟悉C ++,它变得很麻烦,可能的解决方法是:
两种方法中哪一种在速度方面更有效?
我正在做类似的事情:
std::string serialized;
for (int s = 0; s < (int) mfcc_features_a.size(); s++)
{
for (int t = 0; t < (int) mfcc_features_a[s].size(); t++){
serialized = serialized + "|" + boost::lexical_cast<std::string>(mfcc_features_a[s][t]);
}
}
std::cout << "serialized string is: " << serialized << std::endl;
答案 0 :(得分:2)
存储二进制数据可能会更快,因为数据几乎肯定会更小。差异可能对您的计划的整体表现有重要影响,也可能没有影响:您必须进行衡量才能找到答案。
在C ++ 03中,代码中存在严重的低效率。 specialized = specialized + "|" + ...
逐渐创建完整数据的更长和更长的副本,每个浮点值三个副本。使用+=
,或直接将数据写入流。在C ++ 11中,您可以通过编写specialized = std::move(specialized) + "|" + ...
答案 1 :(得分:1)
虽然二进制文件肯定会更快执行,但编码和调试会很麻烦,因为大多数程序员都很难理解浮点格式。在这方面,编程和执行的整体时间可能会更慢。
此外,如果需要将数据移植到任何其他机器,几乎可以肯定,转换为通用可读格式是值得的。
答案 2 :(得分:0)
虽然不是很C ++',但我喜欢使用sprintf
例程将浮点值格式化为固定宽度的字符串(24个字符)。
char *pData = new char[vec.size() * 24 + 1];
char *p = pData;
for (size_t i = 0; i < vec.size(); ++i, p += 24)
sprintf(p, "%+.14E\r\n", vec(i));
// ... write pData to file ...
delete[] pData;
祝你好运!