C++中如何顺时针90°或逆时针90°旋转一个二维数组?请只使用一个for循环给出参考代码
时间: 2024-09-07 10:06:04 浏览: 54
在C++中,顺时针90度旋转二维数组,可以先将二维数组进行转置,然后水平翻转每一行;逆时针90度旋转二维数组,可以先将二维数组进行转置,然后垂直翻转每一列。这里我提供一个顺时针旋转90度的参考代码:
```cpp
#include <iostream>
#include <vector>
void rotateBy90DegreesClockwise(std::vector<std::vector<int>>& matrix) {
int n = matrix.size();
// 首先对矩阵进行转置
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
std::swap(matrix[i][j], matrix[j][i]);
}
}
// 然后翻转每一行
for (int i = 0; i < n; ++i) {
for (int j = 0, k = n - 1; j < k; ++j, --k) {
std::swap(matrix[i][j], matrix[i][k]);
}
}
}
int main() {
std::vector<std::vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
rotateBy90DegreesClockwise(matrix);
// 输出旋转后的矩阵
for (const auto& row : matrix) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << std::endl;
}
return 0;
}
```
这段代码首先将矩阵转置,然后对每一行进行翻转。注意,我们使用了两个嵌套的for循环来实现这个操作,并且只使用了一个额外的for循环来翻转每一行。
阅读全文