C++ 将向量结构的向量写入二进制文件

C++ 将向量结构的向量写入二进制文件,c++,vector,ofstream,C++,Vector,Ofstream,多维向量不像多维数组那样存储在连续的内存位置 你的向量包含一个 ofstream fout("C:/Project/data.dat", ios::out | ios::binary); fout.write((char*)&Sphere_image[o], Sphere_image.size() * sizeof(sphere_data)); fout.close(); 多维向量不像多维数组那样存储在连续的内存位置 你的向量包含一个 ofstream fout("C:/Pr

多维向量不像多维数组那样存储在连续的内存位置

你的向量包含一个

ofstream fout("C:/Project/data.dat", ios::out | ios::binary);
fout.write((char*)&Sphere_image[o], Sphere_image.size() *     
sizeof(sphere_data));
fout.close();

多维向量不像多维数组那样存储在连续的内存位置

你的向量包含一个

ofstream fout("C:/Project/data.dat", ios::out | ios::binary);
fout.write((char*)&Sphere_image[o], Sphere_image.size() *     
sizeof(sphere_data));
fout.close();

如果嵌套了
std::vector
s,则整个数据结构在内存中没有连续性

因此,您必须迭代所有嵌套向量“维度”,并假设
sphere\u data
实例仅在最内层向量中连续

那么,你的台词是:

必须像这样展开:

fout.write((char*)&Sphere_image[o], Sphere_image.size() *     
sizeof(sphere_data));

您还可以提供对称的
sphere\u data::load()
方法。

当您嵌套了
std::vector
s时,整个数据结构在内存中没有连续性

因此,您必须迭代所有嵌套向量“维度”,并假设
sphere\u data
实例仅在最内层向量中连续

所以,你的电话:

必须像这样展开:

fout.write((char*)&Sphere_image[o], Sphere_image.size() *     
sizeof(sphere_data));


您还可以提供对称的
sphere\u data::load()
方法。

似乎您的数据结构本身已经变成了球形。您可以尝试使用三个嵌套循环来获取嵌套的向量内容并写入文件。为什么对这个问题投反对票?他已经尝试做了一些事情,并且已经非常清楚地发布了这个问题。似乎您的数据结构本身已经变成了球形。您可以尝试使用三个嵌套循环来获取嵌套的向量内容并写入文件。为什么对该问题投反对票?他试图做一些事情,并已非常清楚地发布了该问题?此代码在&dim2[0]处给出错误。错误是:类型为“cons sphere_dat*”的参数与类型为const char的参数不兼容。@user6038334:第一个参数需要是
reinterpret_cast(&dim2[0])
reinterpret_cast
是一个巨大的红旗-特别是,您假设sphere_数据是POD。此代码在&dim2[0]处给我错误。错误是:类型为“cons sphere_dat*”的参数与类型为const char的参数不兼容。@user6038334:第一个参数需要是
reinterpret_cast(&dim2[0])
reinterpret\u cast
是一个巨大的危险信号——特别是,您假设sphere\u数据是POD。非常感谢这一帮助。在读取这个二进制文件时,我是否也需要这样做?仅使用ifstream?现在在阅读相同的内容时出现了一个问题。当从文件中读取数据时,您需要构建和填充向量,因此代码不同。我不知道您的问题的详细情况,但例如,您可能需要在文件中写入每个维度的向量项的数量,然后读回这些数字并创建适当大小的向量,然后使用从文件中读取的sphere_数据填充它们。是的,我正在尝试:struct sphere_data{int Camno;int camu x;int camu y;}std::vector s_pixel;std::vector s_img;std::vector Sphere_image;现在我已经将数据从Sphere_image写入二进制文件,现在我想进一步读取二进制文件,以便在我可以访问数据时,您可能希望将最佳答案标记为答案,对所有有用的答案进行投票,然后针对您的问题编写另一个具体问题。非常感谢这一帮助。阅读此二进制文件时,我是否需要以同样的方式进行操作?仅使用ifstream?现在,在阅读相同内容时出现了一个问题。请在阅读时提供帮助要从文件中读取数据,您必须构建和填充向量,因此代码不同。我不知道您的详细问题,但例如,您可能需要在文件中写入每个维度的向量项数量,然后读取这些数字并创建适当大小的向量,然后使用从文件读取的sphere_数据填充它们。是的我试着做:结构sphere_data{int Camno;int cam_x;int cam_y;}std::vector s_pixel;std::vector s_img;std::vector Sphere_image;现在我已经将数据从Sphere_image写入二进制文件,现在我想进一步读取二进制文件,以便在我可以访问的数据,你可能想标记为答案的最佳答复,投票所有有用的答复,然后写另一个具体的问题,你的问题。
fout.write((char*)&Sphere_image[o], Sphere_image.size() *     
sizeof(sphere_data));
for (const auto& vi : Sphere_image) { // For each outer vector
  for (const auto& vj : vi) {         // For each sub-vector
    // Now you do have contiguity for vj
    fout.write(
        reinterpret_cast<const char*>(vj.data()), 
        vj.size() * sizeof(sphere_data));
  }
}
for (const auto& vi : Sphere_image) { // For each outer vector
  for (const auto& vj : vi) {         // For each sub-vector
    for (const auto& sd : vj) {       // For each sphere data
      sd.save(fout);
    }  
  }
}