0

如何在具有用户给定长度的方法中创建一个数组?我想用随机数填充用户给定长度的向量。

 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.ScopedArrayvector比没有您自己的原始数组的内存管理开销更简单的语义。

于 2012-04-19T14:18:03.433 回答
0

我想问题出在r数组上?为什么不也分配new呢?然后你可以使用任何你喜欢的表达式作为大小。

于 2012-04-19T14:18:12.013 回答