以前の質問に対するフォローアップの質問で、完全に回答されています。簡単に要約すると、巨大な配列を保持するクラスを作成する際に問題が発生しました (スタック オーバーフロー エラー)。回答では、代わりに std::vector を使用することを推奨するユーザーもいました。
データを読み込む関数は次のようになります。
Test()
{
memset(myarray, 0, sizeof(myarray));
FILE* fstr = fopen("myfile.dat", "rb");
size_t success= fread(myarray, sizeof(myarray), 1, fstr);
fclose(fstr);
}
次のような myarray の場合:
int myarray[45000000];
私の質問は次のとおりです。これを望ましいものにするにはどうすればよいですか:
std::vector<int> myvector;
私は google を検索し、通常は次のコードを指している複数の回答を見つけました:
std::ifstream input("myfile.dat", std::ios::in | std::ifstream::binary);
std::copy(std::istream_iterator<int>(input),
std::istream_iterator<int>(),
std::back_inserter(myvector));
これを実装した後、 myvector.size() を呼び出すと、(何らかの理由で) 16 になり、ベクター要素にアクセスすると、ベクターの境界を超えてすぐにクラッシュします。
では、これを正しく行うにはどうすればよいでしょうか。「古い」メソッドを単純に使用して配列をベクターに読み込むことができることをどこかで読んだことがありますが、これはそもそもベクターを使用する目的を無効にしているようです。