あなたがstd::vector
Sを入れ子にしたら、あなたは全体データ構造のためにメモリ内の連続性を持っていません。
だから、あなたは、すべてのネストされたベクトル「寸法」を反復処理し、唯一最も内側ベクトルでsphere_data
インスタンスの連続性を前提としなければなりません。
だから、あなたの行:これはとても例えば、sphere_data
はPODであることを前提としていることを
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));
}
}
注:
fout.write((char*)&Sphere_image[o], Sphere_image.size() *
sizeof(sphere_data));
はそのような何かを拡大しなければなりませんsphere_data
の中にポインタデータメンバーがある場合、それは機能しません。
この場合、最も内側のループで呼び出すことができるsphere_data::save(std::ofstream& out) const
メソッドを提供することができます。 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);
}
}
}
また、対称のsphere_data::load()
メソッドを提供することもできます。
データ構造が球形になっているようです。 3つのネストされたループを使用して、ネストされたベクトルの内容を取得し、ファイルに書き込むことができます。 – seccpur
なぜ質問のためのdownvote - 彼は何かをしようとしていると、問題を非常に明確に投稿しましたか? – UKMonkey