2013-03-08 203 views
4

自从我上次访问过数组以来,我一直在等待一段时间(因为我正在使用的库,我需要将二维向量转换回二维数组)例如,类型为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。

任何人都可以提出任何建议,或者更好的方法来co nvert载体,以二维数组..

感谢

+0

它什么时候创建段错误? – 2013-03-08 14:04:27

回答

9

你接近。它应该是:

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

谢谢你解决这个问题,我知道这是小事:) – Phorce 2013-03-08 15:42:44

1

在第二代码替换

temp[i] = new double[N]; 

temp = new double*[N]; 

,并将其移动在循环外

6

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

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


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

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