0

ユーザーが指定した長さのメソッドで 1 つの配列を作成する方法は? ユーザーが指定した長さのベクトルを乱数で埋めたいと思います。

 double* Random::quasiRandomUnif(float a, float b, int NN) 
 {
     int i, errcode;

          N_=NN; // here initialize the member N_

          float r[N_];

     VSLStreamStatePtr stream;
     int i, errcode;

     errcode = vslNewStream( &stream, BRNG,  SEED );
     errcode = vsRngUniform( METHOD, stream, N_, r, a, b );

     double* rd = new double[m_N];
     for(int i=0;i<m_N;i++)
         rd[i]=(double)r[i];

     errcode = vslDeleteStream( &stream );

     return rd;
  }

N_ はクラス Random のメンバーであり、この関数の本体で初期化され、ユーザーが指定した値であると考えました。配列に割り当てられたスペースは定数でなければならないため、不可能です。対処方法?

敬具。

4

4 に答える 4

5

C++ では、次のvectorクラスを使用する必要があります。

std::vector<double> rd;
for(int i=0;i<m_N;i++) rd.push_back(r[i]);
于 2012-04-19T14:14:28.950 に答える
0

演算子を使用しnewます。

float r = new float[m_N];

使い終わったら、忘れずに削除してください。

delete[] r;
于 2012-04-19T14:13:11.830 に答える
0

Boost.ScopedArrayを試してください。vector独自の生配列のメモリ管理オーバーヘッドがない場合よりも単純なセマンティクス。

于 2012-04-19T14:18:03.433 に答える
0

問題はr配列にあると思いますか?それも割り当ててみませんnewか?その後、サイズとして好きな式を使用できます。

于 2012-04-19T14:18:12.013 に答える