将2D矢量转换为2D数组

Pho*_*rce 5 c++ arrays vector

自从我上次访问数组以来已经有一段时间了(我最近一直在使用向量)并且我需要将2D向量转换回2D数组,因为我使用的库接受了double array这个数组的访问器类型的参数是foo[i][j]的例子.

这是我的代码:

double** setupHMM(vector<vector<double> > &vals, int N, int M)
{
  double** temp;
  temp = new double[N][M];

 for(unsigned i=0; (i < N); i++)
 {
    for(unsigned j=0; (j < M); j++)
    {
        temp[i][j] = vals[i][j];
    }
 }
}
Run Code Online (Sandbox Code Playgroud)

有了这个,我明白了 error: ‘M’ cannot appear in a constant-expression

我也尝试过以下方法:

double** setupHMM(vector<vector<double> > &vals, int N, int M)
{
   double** temp;

   for(unsigned i=0; (i < N); i++)
   { 
      temp[i] = new double[N];
      for(unsigned j=0; (j < M); j++)
      {
          temp[j] = new double[M];
          temp[i][j] = vals[i][j];
      } 
   }
 }
Run Code Online (Sandbox Code Playgroud)

然而,这产生了分段错误11.

任何人都可以建议任何建议,或者更好的方法将矢量转换为2D数组..

谢谢

Blo*_*ood 11

你很亲密 它应该是:

double** setupHMM(vector<vector<double> > &vals, int N, int M)
{
   double** temp;
   temp = new double*[N];
   for(unsigned i=0; (i < N); i++)
   { 
      temp[i] = new double[M];
      for(unsigned j=0; (j < M); j++)
      {
          temp[i][j] = vals[i][j];
      } 
   }
 }
Run Code Online (Sandbox Code Playgroud)


Ton*_*ion 8

双指针(double**)不可转换为2D数组.

double** temp;
temp = new double[N][M];  //invalid


double** temp;
temp = new double(*)[M];
Run Code Online (Sandbox Code Playgroud)

认为因为1D阵列衰减到指针因此2D阵列将衰减为双指针是一种常见的误解.这不是真的.衰变只发生在一个指针上.