c++旋转窗口90度
时间: 2024-10-11 18:02:38 浏览: 16
在C++中,如果你想要将一个二维矩阵或数组按照顺时针或逆时针方向旋转90度,可以采用两种常见的方法:
1. **直接转置**:
对于矩阵来说,可以先将其行变成列,再把新的行变成原来的列。例如,对于一个二维数组`arr[row][col]`,你可以创建一个新的二维数组`newArr[col][row]`来存储旋转后的结果。
```cpp
#include <vector>
std::vector<std::vector<int>> rotateMatrix(std::vector<std::vector<int>>& matrix) {
int n = matrix.size();
std::vector<std::vector<int>> newArr(n, std::vector<int>(n));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
newArr[j][n - i - 1] = matrix[i][j];
}
}
return newArr;
}
```
2. **两步旋转**:
另一种常见做法是先水平翻转矩阵,然后垂直翻转。如果原矩阵是`arr[row][col]`,首先水平翻转得到`arr[col][row]`,然后再垂直翻转得到`arr[n - 1 - row][col]`。
```cpp
void rotateMatrix(int matrix[][N], int N) {
// 水平翻转
for (int layer = 0; layer < N / 2; ++layer) {
for (int i = layer; i < N - 1 - layer; ++i) {
int temp = matrix[layer][i];
matrix[layer][i] = matrix[N - 1 - i][layer];
matrix[N - 1 - i][layer] = matrix[N - 1 - layer][N - 1 - i];
matrix[N - 1 - layer][N - 1 - i] = matrix[i][N - 1 - layer];
matrix[i][N - 1 - layer] = temp;
}
}
// 如果N不是偶数,还需要再做一次垂直翻转
if (N % 2 != 0) {
for (int i = 0; i < N; ++i) {
int temp = matrix[i][0];
for (int j = 1; j < N / 2 + 1; ++j) {
matrix[i][j] = matrix[i][N - j];
}
matrix[i][N / 2] = temp;
}
}
}
```
阅读全文