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

时间:2013-03-08 14:00:29

标签: c++ arrays vector

自从我上次访问数组以来已经有一段时间了(我最近一直在使用向量)并且我需要将2D向量转换回2D数组,因为我使用的库接受类型{{1}的参数例如,此数组的访问者为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

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

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

谢谢

3 个答案:

答案 0 :(得分:10)

你很亲密。它应该是:

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];
      } 
   }
 }

答案 1 :(得分:8)

双指针(double**)不能转换为2D数组。

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


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

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

答案 2 :(得分:1)

替换

temp[i] = new double[N];

temp = new double*[N];

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