私は、Stack Overflowとファイルにベクトルを書き込む他の多くのサイトについて、いくつかの記事を読んでいます。私は私が働いていると感じていることを実装しましたが、いくつか問題があります。構造体のデータメンバの1つはクラス文字列であり、ベクトルを読み込むとそのデータは失われます。また、最初の反復を書き込んだ後、追加の反復によってmallocエラーが発生します。ベクトルをファイルに保存してから、プログラムが再び起動したときにそれを読み込むために、以下のコードを変更するにはどうすればよいですか?現在、データメンバのみがベクトルであるが、そのベクトルを操作するメソッドを持つクラスのデストラクタに書き込むコンストラクタで、読み込みが行われます。構造体のベクトルを読み込んでファイルに書き込む
ここに私の読み書き方法の要点があります。
ifstream infile;
infile.open("data.dat", ios::in | ios::binary);
infile.seekg (0, ios::end);
elements.resize(infile.tellg()/sizeof(element));
infile.seekg (0, ios::beg);
infile.read((char *) &elements[0], elements.capacity()*sizeof(element));
infile.close();
書き込み:
ofstream outfile;
outfile.open("data.dat", ios::out | ios::binary | ios_base::trunc);
elements.resize(elements.size());
outfile.write((char *) &elements[0], elements.size() * sizeof(element));
outfile.close();
構造体要素:C++で
struct element {
int id;
string test;
int other;
};
どのようなC++学習教材を使って、このようにファイルへのアクセスを教えてくれましたか? –
これは宿題の一部で、ベクトルデータをファイルに読み書きするためにfstreamを使用する必要があります。クラス内のファイルに複雑なベクトルの書き込みを行うことは正確にはカバーしていなかったので、私はfstreamのドキュメントなどを読んで、例をオンラインで見ました。私はバイナリで書くことがこれを達成する最も簡単な方法だと決めました。サイズ変更のような特定の仕様は、ファイルサイズを制限するために選択したものでした。私たちには公式の本や教材はありません。私たちはいくつかのオンラインノートを持っていますが、私が必要とするものを実装するのに必要なほど細かくはありません。 –
私は文字列を文字配列に変更し、その変更をサポートするためにコード内のいくつかの小さな変更を行うことにしました。文字列ではなく文字配列に切り替えると、上記のコードはうまくいくように見えます。 –