将二维向量转换为二维数组

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

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

【讨论】:

以上是关于将二维向量转换为二维数组的主要内容,如果未能解决你的问题,请参考以下文章

将字符串向量转换为双二维数组向量

如何将静态二维数组转换为特征值

C++ RGB 图像数据叠加成二维数组(向量的向量)

将向量模拟为二维数组

如何将 C# 中的二维数组传递给 C++ DLL?

在c ++ Qt中将二维向量/二维数组显示为简单图形