我有一个二进制文件,其中包含大小为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个元素的数据成员的地址?
答案 0 :(得分:4)
是的,每个向量元素只是一个double
对象,&data[i]
指向该对象。
实际上,所有double
个对象都在一个连续的数组中,所以你可以一次读取它们:
infile.read((char*)data.data(), filesize);
当然,如下所述,这要求文件以与程序的double
值的二进制表示形式兼容的格式编写,否则值将是垃圾。