将二维向量转换为二维数组
Posted
技术标签:
【中文标题】将二维向量转换为二维数组【英文标题】:Converting 2D vector to 2D array 【发布时间】:2013-03-08 14:00:29 【问题描述】:自从我上次访问数组已经有一段时间了(我最近一直在使用向量),我需要将 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。
任何人都可以提出任何建议,或者将矢量转换为二维数组的更好方法..
谢谢
【问题讨论】:
什么时候产生段错误? 【参考方案1】:你很亲密。应该是:
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];
【讨论】:
感谢您的澄清,我知道这是件小事 :)【参考方案2】:双指针 (double**
) 不能转换为二维数组。
double** temp;
temp = new double[N][M]; //invalid
double** temp;
temp = new double(*)[M];
认为由于一维数组衰减为指针,因此二维数组将衰减为双指针,这是一种常见的误解。这不是真的。衰减只发生在单个指针上。
【讨论】:
【参考方案3】:替换
temp[i] = new double[N];
与
temp = new double*[N];
在第二个代码中,并将其移出循环
【讨论】:
以上是关于将二维向量转换为二维数组的主要内容,如果未能解决你的问题,请参考以下文章