c++中的多维数组



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

例如矩阵乘法,有两个数组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[][] = ...
    }
}

您可以使用以下示例。

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,它提供了许多函数来对矩阵进行操作。

相关内容

  • 没有找到相关文章

最新更新