C ++中的多维数组

时间:2015-08-30 12:58:07

标签: java c++ multidimensional-array

我想创建一个函数,它将许多多维数组作为参数并返回另一个多维数组。

例如矩阵乘法,有2个数组Matrix1 [n] [m]和Matrix2 [m] [k],我的函数必须返回Result [n] [k]。

在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 个答案:

答案 0 :(得分: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提供许多函数来对矩阵应用操作。