自从我上次访问数组以来已经有一段时间了(我最近一直在使用向量)并且我需要将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数组..
谢谢
答案 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];
在第二个代码中,并将其移出循环