我想创建一个函数,它接受多个多维数组作为参数,并返回另一个多维数组。
例如矩阵乘法,有两个数组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,它提供了许多函数来对矩阵进行操作。