#include <iomanip>
#include <iostream>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::vector;
constexpr int ROW = 4000;
constexpr int COL = 4000;
void initilizeMatrix(int **m, int row, int col) {
for (auto i = 0; i < row; ++i) {
for (auto j = 0; j < col; ++j) {
m[i][j] = rand() % 100;
}
}
}
void printMatrix(int **m, int row, int col) {
for (auto i = 0; i < row; ++i) {
for (auto j = 0; j < col; ++j) {
cout << setw(5) << m[i][j] << "; ";
}
cout << endl;
}
}
int **allocateMatrix(int row, int col) {
int **matrix = new int *[row];
for (int i = 0; i < row; ++i) {
matrix[i] = new int[col]{0};
}
return matrix;
}
int deallocateMatrix(int **matrix, int row) {
for (int i = 0; i < row; ++i) {
delete matrix[i];
}
delete[] matrix;
return 0;
}
int **multiplyMatrix(int **m1, int row1, int col1, int **m2, int row2,
int col2) {
if (col1 != row2) return nullptr;
auto ret = allocateMatrix(row1, col2);
int i, j, k;
for (i = 0; i < row1; i++) {
for (j = 0; j < col2; j++) {
for (k = 0; k < col1; k++) {
ret[i][j] += m1[i][k] * m2[k][j];
}
}
}
return ret;
}
int main() {
int **matrix1 = allocateMatrix(ROW, COL);
int **matrix2 = allocateMatrix(COL, ROW);
initilizeMatrix(matrix1, ROW, COL);
initilizeMatrix(matrix2, COL, ROW);
printMatrix(matrix1, ROW, COL);
cout << endl;
printMatrix(matrix2, COL, ROW);
double start = clock();
cout << "start calculate matrix" << endl;
auto result = multiplyMatrix(matrix1, ROW, COL, matrix2, COL, ROW);
cout << "total time: " << clock() - start << endl;
printMatrix(result, ROW, ROW);
deallocateMatrix(matrix1, ROW);
deallocateMatrix(matrix2, COL);
deallocateMatrix(result, ROW);
return EXIT_SUCCESS;
}
05-25
01-04
483
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-30
1万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-23
322
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交