1

私は問題があります。要件を満たすためにいくつかのポイントで変更する巨大な c++ プロジェクトがあります。予想よりも多くのデータをロードしましたが、このプログラムのある時点で、データ数に別の数を掛けたサイズの新しいベクトルが割り当てられています。

vector = new real[data.size()*28];

ここでエラーメッセージが表示されます:

terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc

それほど多くのスペースを割り当てることができないためです。このベクトルはプログラムのさまざまな部分で使用されているため、変更できません。プログラムの残りの部分をここで新しい定義に適合させることは非常に困難であり、(私にとっては)おそらく不可能です。

このベクターを使用して大きなデータセットを取得するにはどうすればよいですか?

ところで:私は日食を使用していますが、日食自体に割り当てることができるスペースのサイズを増やすことができますか?

ありがとうございました!

4

2 に答える 2

2

Encryptyon が指摘したように (そして彼の功績は認められるべきです)、メモリを非連続ブロックとして割り当てる必要があります。を使用してこれを行うことができますstd::deque

std::deque<float> v( data.size() * 28 );

を使用して任意のメンバーにアクセスできますoperator[]

real x = v[1000000];

std::vectoraのインターフェイスは astd::dequeに非常に似ているため、あたかもそれが a であるかのように、deque (の一部) を反復処理することもできますstd::vector。ただし、コンテナの内部ストレージはおそらく連続していないため、 &v[0](またはc ++ 11では)できないことです。v.data()

于 2014-06-25T09:44:11.103 に答える
1

それほど多くの連続 RAM を割り当てることはできません。deque を使用してください

于 2014-06-25T07:45:30.137 に答える