2015-08-30 80 views
-3

我想创建一个函数,它将许多多维数组作为参数并返回另一个多维数组。例如矩阵乘法,有2个数组Matrix1 [n] [m]和Matrix2 [m] [k],我的函数必须返回Result [n] [k]。C++中的多维数组

在java中;

/** 
* @param m1 Matrix 1 
* @param m2 Matrix 2 
* @return Matrix1*Matrix2 
*/ 
public static long[][] matrixMult(long[][] m1, long[][] m2){ 
    long[][] mult = new long[m1.length][m2[0].length]; 

    for (int i = 0; i < m1.length; i++) { 
     for (int j = 0; j < m2[0].length; j++) { 
      for (int k = 0; k < m1[0].length; k++) { 
       mult[i][j] += m1[i][k] * m2[k][j]; 
      } 
     } 
    } 
    return mult; 
} 

这只是一个示例代码。

我想用C++做同样的事情;

int main() 
{ 
    int m1, m2, n1, n2; 
    scanf("%d %d", &m1, &m2); 
    int matrix1[m1][m2]; 
    // Take array values 
    scanf("%d %d", &n1, &n2); 
    int matrix2[n1][n2]; 
    // Take array values again 
    if(m2 == n1){ 
     // I need to multiply those arrays Matrix1 and Matrix2 and assign the product as a array to Result[][] 
     // int result[][] = ... 
    } 
} 
+1

你忘记描述阻止你完成代码的问题。堆栈溢出是我们帮助解决问题的地方,而不是自由代码重写服务。 – Pshemo

+2

'int matrix1 [m1] [m2];'不是标准的C++(它是一个VLA扩展)。改用'std :: vector'。 – Jarod42

+0

@Pshemo问题是当我试图定义一个数组时,我得到错误 - 可能是因为语法 - 我不明白为什么。错误没有意义,int **和int [] []是不同的,转换错误,sizetype错误,我有这么多的错误。这就是为什么我无法解释实际的错误,因为我不知道什么是错的。我不想使用矢量,我需要使用数组。到处搜索这样的东西,但我找不到它。这就是为什么我在这里..:/ – codebender

回答

0

下面是您可以使用的示例。

typedef std::vector<std::vector<int>> matrix_t; 

matrix_t Mul(const matrix_t& a, const matrix_t& b) 
{ 
    matrix_t mult(a.size()); 

    for (int i = 0; i < a.size(); ++i) 
    { 
     mult[i].reserve(b[0].size()); //avoid push backs while calculating your result 
     std::fill(mult[i].begin(), mult[i].end(), 0); // make sure the array is initialized to the desired value 

     for (int j = 0; j < b[0].size(); ++j) 
     { 
      for (int k = 0; k < a[0].size(); ++k) 
      { 
       mult[i][j] += a[i][k] * b[k][j]; 
      } 
     } 
    } 

    return mult; 
} 

你也可以使用OpenCv它提供了许多功能上的矩阵应用操作。

+0

保存自己'mult [i] .reserve(b [0] .size());'的麻烦并创建如下结果向量:'matrix_t mult(a。 size(),std :: vector (b [0] .size()));' – user4581301