cpp遍历二维vector
时间: 2024-10-26 21:02:48 浏览: 26
在C++中,遍历二维`std::vector`通常涉及到两层循环,因为`std::vector`是一个动态数组,可以看作是由许多行组成的。下面是一个简单的示例,展示如何遍历一个二维`vector<vector<int>>`:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<int>> matrix = { // 假设我们有一个3x3矩阵
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (size_t i = 0; i < matrix.size(); ++i) { // 遍历每一行
for (size_t j = 0; j < matrix[i].size(); ++j) { // 遍历每一列
std::cout << matrix[i][j] << " "; // 输出元素值
}
std::cout << "\n"; // 每一行结束后换行
}
return 0;
}
```
在这个例子中,外层循环控制行数,内层循环控制每个元素。每打印完一行,会换到下一行。
相关问题
C++遍历vector<vector<int>>数组
在C++中,遍历二维向量`std::vector<std::vector<int>>`通常有两种方式:嵌套循环或者利用范围for循环。
1. **嵌套循环**:
```cpp
std::vector<std::vector<int>> matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
// 使用两个嵌套循环遍历
for (int i = 0; i < matrix.size(); ++i) {
for (int j = 0; j < matrix[i].size(); ++j) {
std::cout << matrix[i][j] << " ";
}
std::cout << "\n"; // 每行结束后换行
}
```
2. **范围for循环**:
从C++11开始,你可以使用范围for循环,但这只适用于支持迭代器的容器。对于二维向量,需要先获取内部向量的起始和结束迭代器:
```cpp
for (const auto& row : matrix) {
for (int element : row) {
std::cout << element << " ";
}
std::cout << "\n";
}
```
这里假设`row`是`matrix`中的每个元素,即一个一维向量。
c++中逐条斜线遍历二维数组
在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] << " ";
}
}
```
阅读全文