c++中逐条斜线遍历二维数组
时间: 2024-12-08 20:24:15 浏览: 14
在C++中,逐条斜线遍历二维数组通常是沿着主对角线和副对角线进行的。下面是一个简单的方法来分别遍历这两个方向:
**主对角线遍历:**
主对角线遍历是从左上角到右下角,即每个元素的索引(i, j)满足i == j。你可以创建一个循环,每次递增i和j,并检查边界条件以避免越界。
```cpp
std::vector<std::vector<int>>& arr;
int n = arr.size();
for (int i = 0; i < n && i < n - i; ++i) {
int row = i, col = i;
std::cout << arr[row][col] << " ";
}
```
**副对角线遍历:**
副对角线是从右上角到左下角,当数组的行数小于等于列数时,索引(i, j)满足i + j = n - 1(n为数组大小)。同样,你需要创建一个循环并更新索引值。
```cpp
if (n <= n / 2) { // 当行数不大于列数的一半时才有副对角线
int offset = n - 1;
for (int i = 0; i < n && i <= offset; ++i) {
int row = n - 1 - i, col = i;
std::cout << arr[row][col] << " ";
}
} else {
// 对于大于一半的情况,相当于反过来看,因为i + j = n - 1
// 只需要交换row和col的计算即可
offset = n / 2;
for (int i = 0; i < n && i <= offset; ++i) {
int row = i, col = n - 1 - i;
std::cout << arr[row][col] << " ";
}
}
```
阅读全文