将二进制文件读入vector元素的地址

时间:2015-05-12 06:04:37

标签: c++ vector

我有一个二进制文件,其中包含大小为8个字节的双精度数。我想将双打读成vector<double>,见下文

  ifstream infile("x.dat", ios::binary);
  vector<double>data(filesize/8, 0.0);
  for(int i=0; i< (filesize/8); ++i)
  {
    infile.read( (char *) (&data[i]), sizeof(double) );
  }

我知道如果数据是C数组,但是不确定这是否适用于vector,这会有效,因为vector包含的内容多于C数组(vector有方法),地址&data[i]是否表示第i个元素的数据成员的地址?

1 个答案:

答案 0 :(得分:4)

是的,每个向量元素只是一个double对象,&data[i]指向该对象。

实际上,所有double个对象都在一个连续的数组中,所以你可以一次读取它们:

infile.read((char*)data.data(), filesize);

当然,如下所述,这要求文件以与程序的double值的二进制表示形式兼容的格式编写,否则值将是垃圾。