c++ - 序列化一个浮点 vector

标签 c++ boost xcode4 stdvector

问题是我想在文件中保存 float 的二维 vector 。由于我对C++不熟悉,越来越麻烦,可能的解决方法是:

  1. 将它们序列化为一个字符串并写入一个文件。
  2. 将它们序列化为二进制数据并写入文件。

就速度而言,这两种方法中哪一种更有效?

我正在做类似的事情:

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;

最佳答案

存储二进制数据可能会更快一些,因为数据几乎肯定会更小。这种差异可能对您的程序的整体性能有显着影响,也可能没有显着影响:您必须进行测量才能找出答案。

在 C++03 中,您的代码效率很低。 specialized = specialized + "|"+ ... 创建越来越长的完整数据拷贝,每个浮点值三个拷贝。要么使用 +=,要么将数据直接写入流。在 C++11 中,您可以通过编写 specialized = std::move(specialized) + "|"来解决它+ ...

关于c++ - 序列化一个浮点 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15738494/

相关文章:

c++ - 使用 C++ 将对象读写到二进制文件中?

c++ - ADL 无法找到具有用户定义类型的适当限定符的流运算符

c++ - 我是否在 Visual Studio 中正确设置了 boost 包含和链接器路径? (提供的步骤)

XCode 不导入 OS X 崩溃日志

c++ - Valgrind:抛出自定义异常时为 "invalid read size 1"

c++ - 按升序存储列表中的元素

xcode - Xcode 4 中的 iOS 3.x 支持

objective-c - 继承在模拟器上工作,但在 Iphone 上不行!

c++ - cin.get() ASCII码与代码中已经设置的字符的ASCII码不同

c++ - Caffe层创建失败