C++中如何顺时针90°或逆时针90°旋转一个二维数组?请给出参考代码
时间: 2024-09-07 19:06:03 浏览: 98
在C++中,顺时针或逆时针旋转一个二维数组可以通过多种方法实现,下面分别提供两种方法的示例代码:
1. 顺时针旋转90度的方法之一是先转置矩阵(行列互换),然后反转每一行。逆时针旋转90度则是先反转每一行,然后转置矩阵。
顺时针旋转90度的代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void rotate90DegreesClockwise(vector<vector<int>>& matrix) {
int n = matrix.size();
// 转置矩阵
for (int i = 0; i < n; ++i) {
for (int j = i; j < n; ++j) {
swap(matrix[i][j], matrix[j][i]);
}
}
// 反转每一行
for (int i = 0; i < n; ++i) {
reverse(matrix[i].begin(), matrix[i].end());
}
}
int main() {
vector<vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
rotate90DegreesClockwise(matrix);
for (const auto& row : matrix) {
for (int val : row) {
cout << val << " ";
}
cout << endl;
}
return 0;
}
```
逆时针旋转90度的代码示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
void rotate90DegreesCounterClockwise(vector<vector<int>>& matrix) {
int n = matrix.size();
// 反转每一行
for (int i = 0; i < n; ++i) {
reverse(matrix[i].begin(), matrix[i].end());
}
// 转置矩阵
for (int i = 0; i < n; ++i) {
for (int j = i; j < n; ++j) {
swap(matrix[i][j], matrix[j][i]);
}
}
}
int main() {
vector<vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
rotate90DegreesCounterClockwise(matrix);
for (const auto& row : matrix) {
for (int val : row) {
cout << val << " ";
}
cout << endl;
}
return 0;
}
```
注意:这里的二维数组用的是`vector<vector<int>>`类型,它是一个动态数组,可以容纳不同长度的子数组。如果使用的是静态数组,需要根据具体大小进行适当的调整。
阅读全文