C++ 将二进制文件读入向量元素的地址

C++ 将二进制文件读入向量元素的地址,c++,vector,C++,Vector,我有一个二进制文件,其中包含8字节大小的两倍。我想将双精度读入一个向量,见下文 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) ); } ifstream-infle(

我有一个二进制文件,其中包含8字节大小的两倍。我想将双精度读入一个
向量
,见下文

  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) );
  }
ifstream-infle(“x.dat”,ios::binary);
矢量数据(文件大小/8,0.0);
对于(int i=0;i<(filesize/8);+i)
{
infle.read((char*)(&data[i]),sizeof(double));
}

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

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

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

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

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

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

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

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

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

是-代码没有问题(除了不检查
infle
是否存在打开/读取错误)。为什么不运行它,向自己证明它是有效的,然后继续程序的其余部分呢?
vector
是一个顺序容器,它包含
C
数组之类的数据,以及
size
capacity
之类的额外信息。是的,它也被设计为用作基本数组。可能重复。是-代码很好(除了不检查
infle
是否存在打开/读取错误)。为什么不运行它,向自己证明它是有效的,然后继续程序的其余部分呢?
vector
是一个顺序容器,它包含
C
数组之类的数据,以及
size
capacity
之类的额外信息。是的,它也被设计为用作基本数组。可能是的重复。谢谢,
data.data()
在这里是什么意思?它会返回整个连续数组的地址吗?@MikeSeymour虽然OP的想法通常是不可移植的,因为双精度的表示形式可能在不同的操作系统中有所不同(当转储到文件中时),不是吗?@vsoftco:它和发布的代码一样可移植。如果文件是由使用相同表示法的程序编写的,那么就可以了。它使用了不同的表示形式,然后你会得到垃圾。@Allankunzi:不,你不能将迭代器与指针进行比较。但是它所指对象的地址,
&*it
,将与
&data[0]
相同,因为两者都是同一对象的地址。@Allankuzi:这取决于你的直觉。迭代器不是指针(它在某些方面的行为与指针类似),一般来说,您无法比较不相关的类型;从这个角度来看,你不能比较它们。谢谢,这里的
data.data()
是什么意思?它会返回整个连续数组的地址吗?@MikeSeymour虽然OP的想法通常是不可移植的,因为双精度的表示形式可能在不同的操作系统中有所不同(当转储到文件中时),不是吗?@vsoftco:它和发布的代码一样可移植。如果文件是由使用相同表示法的程序编写的,那么就可以了。它使用了不同的表示形式,然后你会得到垃圾。@Allankunzi:不,你不能将迭代器与指针进行比较。但是它所指对象的地址,
&*it
,将与
&data[0]
相同,因为两者都是同一对象的地址。@Allankuzi:这取决于你的直觉。迭代器不是指针(它在某些方面的行为与指针类似),一般来说,您无法比较不相关的类型;从这个角度来看,你不能比较它们。