Java C+中的多维数组+;
我想创建一个函数,它将多个多维数组作为参数,并返回另一个多维数组 例如矩阵乘法,有两个数组Matrix1[n][m]和Matrix2[m][k],我的函数必须返回结果[n][k] 爪哇语Java C+中的多维数组+;,java,c++,multidimensional-array,Java,C++,Multidimensional Array,我想创建一个函数,它将多个多维数组作为参数,并返回另一个多维数组 例如矩阵乘法,有两个数组Matrix1[n][m]和Matrix2[m][k],我的函数必须返回结果[n][k] 爪哇语 /** * @param m1 Matrix 1 * @param m2 Matrix 2 * @return Matrix1*Matrix2 */ public static long[][] matrixMult(long[][] m1, long[][] m2){ long[][] mul
/**
* @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;
}
这是一个你可以使用的样本
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;
}
typedef std::向量矩阵;
矩阵(常数矩阵t&a、常数矩阵t&b)
{
矩阵(a.size());
对于(int i=0;i
您还可以使用提供了许多函数的函数对矩阵应用操作。您忘了描述阻止您完成代码的问题。堆栈溢出是我们帮助解决问题的地方,而不是免费的代码重写服务代码>不是标准C++(它是VLA扩展)。改为使用
std::vector
。@Pshemo的问题是,当我试图定义一个数组时,我出现了错误——可能是因为语法原因——但我不明白为什么。错误没有意义,int**和int[][]是不同的,转换错误,大小类型错误,我得到了很多错误。这就是为什么我不能解释实际的错误,因为我不知道哪里出了问题。我不想使用向量,我需要使用数组。到处都找过像这样的东西,但我找不到。这就是我来这里的原因/省去了mult[i].reserve(b[0].size())的麻烦编码>并创建如下结果向量:矩阵(a.size(),std::vector(b[0].size())代码>
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;
}