使用动态内存分配生成动态数组编写并测试3*3矩阵转置函数
时间: 2024-05-16 15:18:34 浏览: 136
下面是使用动态内存分配生成动态数组编写并测试3*3矩阵转置函数的示例代码:
```c++
#include <iostream>
using namespace std;
int** createMatrix(int rows, int cols) {
int** matrix = new int*[rows];
for (int i = 0; i < rows; i++) {
matrix[i] = new int[cols];
}
return matrix;
}
void deleteMatrix(int** matrix, int rows) {
for (int i = 0; i < rows; i++) {
delete[] matrix[i];
}
delete[] matrix;
}
void transposeMatrix(int** matrix, int rows, int cols) {
int** temp = createMatrix(cols, rows);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
temp[j][i] = matrix[i][j];
}
}
for (int i = 0; i < rows; i++) {
delete[] matrix[i];
}
delete[] matrix;
matrix = createMatrix(cols, rows);
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
matrix[i][j] = temp[i][j];
}
}
deleteMatrix(temp, cols);
}
int main() {
int** matrix = createMatrix(3, 3);
int count = 1;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
matrix[i][j] = count++;
}
}
cout << "Before transpose: " << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
transposeMatrix(matrix, 3, 3);
cout << "After transpose: " << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
deleteMatrix(matrix, 3);
return 0;
}
```
在上面的示例代码中,我们首先定义了一个 `createMatrix` 函数来生成动态数组,该函数使用了动态内存分配来创建一个二维的动态数组。然后,我们定义了 `deleteMatrix` 函数来释放动态数组占用的内存。接下来定义了 `transposeMatrix` 函数来实现矩阵转置,该函数接受一个二维动态数组、行数和列数作为参数。在该函数中,我们首先创建一个临时的二维动态数组来存储转置后的矩阵,然后释放原始的二维动态数组占用的内存,最后重新创建一个新的二维动态数组来存储转置后的矩阵。最后,我们在 `main` 函数中生成一个3*3的矩阵,进行矩阵转置,并输出转置前和转置后的矩阵。
需要注意的是,在 `transposeMatrix` 函数中,我们使用了 `deleteMatrix` 函数来释放临时数组占用的内存。这是因为我们使用动态内存分配生成的动态数组必须手动释放,否则会造成内存泄漏。
阅读全文