7

自从我上次访问数组以来已经有一段时间了(我最近一直在使用向量),我需要将 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];
    }
 }
}

有了这个,我得到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];
      } 
   }
 }

但是,这会产生分段错误 11。

任何人都可以提出任何建议,或者将向量转换为二维数组的更好方法..

谢谢

4

3 回答 3

12

你很亲密。它应该是:

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];
      } 
   }
 }
于 2013-03-08T14:04:00.357 回答
9

双指针 ( double**) 不能转换为二维数组。

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


double** temp;
temp = new double(*)[M];

认为由于一维数组衰减为指针,因此二维数组将衰减为双指针,这是一个常见的误解。这不是真的。衰减只发生在单个指针上。

于 2013-03-08T14:04:50.787 回答
1

代替

temp[i] = new double[N];

temp = new double*[N];

在第二个代码中,并将其移出循环

于 2013-03-08T14:04:40.637 回答