C++中的多维数组 < >我用动态多维数组在C++中进行矩阵乘法程序。 问题是当我输入测试值时 矩阵A=row1{1},row2{2}矩阵B=row1{1,2,3},它在用户 输入第一个数组的值,我通过调试找到了它。但当我进入时,程序运行良好 矩阵A=row1{1,2},row2{3,4}矩阵B=row1{5,6},row2{7,8}
我希望这个程序是一个通用程序,可以乘以所有矩阵C++中的多维数组 < >我用动态多维数组在C++中进行矩阵乘法程序。 问题是当我输入测试值时 矩阵A=row1{1},row2{2}矩阵B=row1{1,2,3},它在用户 输入第一个数组的值,我通过调试找到了它。但当我进入时,程序运行良好 矩阵A=row1{1,2},row2{3,4}矩阵B=row1{5,6},row2{7,8},c++,arrays,multidimensional-array,matrix-multiplication,dynamic-arrays,C++,Arrays,Multidimensional Array,Matrix Multiplication,Dynamic Arrays,我希望这个程序是一个通用程序,可以乘以所有矩阵 #include <iostream> using namespace std; class Lab_02 { public: void Product(){ int a1Rows, a1Columns; int a2Rows, a2Columns; cout << "Plz Enter the no. of rows for Array 1 :"; cin >>
#include <iostream>
using namespace std;
class Lab_02
{
public:
void Product(){
int a1Rows, a1Columns;
int a2Rows, a2Columns;
cout << "Plz Enter the no. of rows for Array 1 :";
cin >> a1Rows;
cout << "Plz Enter the no. of columns for Array 1 :";
cin >> a1Columns;
cout << "Plz Enter the no. of rows for Array 2 :";
cin >> a2Rows;
cout << "Plz Enter the no. of columns for Array 2 :";
cin >> a2Columns;
int **dynamicArray = 0;
int **dynamicArray2 = 0;
int **dynamicArray3 = 0;
cout << endl;
for (int i = 0; i < a1Rows; i++)
{
dynamicArray3 = new int *[a1Rows];
}
for (int i = 0; i < a2Columns; i++)
{
dynamicArray3[i] = new int[a2Columns];
}
// memory allocated for elements of rows.
for (int i = 0; i < a1Rows; i++)
{
dynamicArray = new int *[a1Rows];
}
// memory allocated for elements of each column.
for (int i = 0; i < a1Columns; i++)
{
dynamicArray[i] = new int[a1Columns];
}
// memory allocated for elements of rows.
for (int i = 0; i < a2Rows; i++)
{
dynamicArray2 = new int *[a2Rows];
}
// memory allocated for elements of each column.
for (int i = 0; i < a2Columns; i++)
{
dynamicArray2[i] = new int[a2Columns];
}
cout << "enter the values or array 1 \n";
for (int i = 0; i < a1Rows; i++)
{
for (int j = 0; j < a1Columns; j++)
{
cout << "array[" << i << "][" << j << "]\t";
cin >> dynamicArray[i][j];
}
}
cout << "enter the values or array 2 :\n";
for (int i = 0; i < a2Rows; i++)
{
for (int j = 0; j < a2Columns; j++)
{
cout << "array[" << i << "][" << j << "]\t";
cin >> dynamicArray2[i][j];
}
}
int sum;
for (int i = 0; i < a1Rows; i++)
{
for (int j = 0; j < a1Columns ; j++)
{
sum = 0;
for (int k = 0; k < a2Columns ; k++)
{
sum = sum + (dynamicArray[i][k] * dynamicArray2[k][j]);
}
dynamicArray3[i][j] = sum;
}
}
cout <<"Result" << endl << endl;
for (int i = 0; i < a1Rows; i++)
{
for (int j = 0; j < a2Columns; j++)
{
cout << dynamicArray3[i][j] << "\t";
}
cout << endl;
}
}
};
void main(void)
{
Lab_02 object;
object.Product();
}
您对矩阵的内存分配是个问题。 将它们更改为如下内容
// memory allocated for elements of rows.
dynamicArray = new int *[a1Rows];
// memory allocated for elements of each column.
for (int i = 0; i < a1Rows; i++)
{
dynamicArray[i] = new int[a1Columns];
}
您需要为行分配一个数组,然后需要在行上循环并分配列。代码的问题是您不应该在循环中分配行。您只需要为行分配一个数据,然后循环为每行分配数据 例如,与此相反:
for (int i = 0; i < a1Rows; i++)
{
dynamicArray = new int *[a1Rows];
}
// memory allocated for elements of each column.
for (int i = 0; i < a1Columns; i++)
{
dynamicArray[i] = new int[a1Columns];
}
如果dynamicArray1和dynamicArray2在相乘之前没有所需的列数和行数,则此循环将失控
首先,乘法前应进行以下测试:
if (a1Columns != a2Rows)
return;
第二,你的k循环是错误的。应该是这样的:
dynamicArray = new int *[a1Rows];
for (int i = 0; i < a1Columns; i++)
{
dynamicArray[i] = new int[a1Columns];
}
for (int k = 0; k < a2Rows; k++)
sum = sum + (dynamicArray[i][k] * dynamicArray2[k][j]);
dynamicArray3[i][j] = sum;
你为什么不使用std::vector来解决这些问题?因为我一定要这样做,除此之外,如果可能的话,那么为什么不呢?我以后会研究更好的方法,首先我必须检查每个概念:我不理解你对输入内容的描述。您为Array1输入了多少行和列,为Array2输入了多少行/列?感谢您的理解:!对于数组1、2行和1列对于数组2、1行和3列,这正是我正在做的:您可以看到我的代码和您的代码。它们正是sameNo,在循环中分配行,然后循环列数以分配列Shey PaulMcKenz,我同意你的三点:我之所以使用循环来分配行的内存,是因为我希望这个程序是一个可以将所有可乘法矩阵相乘的通用程序。如果我有一个矩阵的行数超过1,我的观点是什么?
for (int k = 0; k < a2Rows; k++)
sum = sum + (dynamicArray[i][k] * dynamicArray2[k][j]);
dynamicArray3[i][j] = sum;