【二维vector遍历】 auto表示vector<int>
🧩 1️⃣ auto
是什么?
在 C++ 中,auto
是 类型自动推导 关键字。
意思是:
编译器会根据
=
右边或循环表达式自动推断出变量的实际类型。
✅ 在这段里:
for (auto& e : edges)
edges
是vector<vector<int>>
(一个二维数组/列表)。所以,
edges
的元素e
是vector<int>
。auto
就自动推断出来:auto => vector<int>
加上 &
就是:
auto& e => vector<int>&
也就是:
e
是对edges
里某个vector<int>
的引用。
🧩 2️⃣ 那为什么能写 e[0]
、e[1]
?
因为:
e
是vector<int>
。vector<int>
就是一个整数数组(动态数组)。所以
e[0]
就是这个vector
里的第一个元素,e[1]
就是第二个。
🔑 结合上下文
edges
本身是形如:
edges = [[0, 1],[1, 2],[2, 3]
];
这是输入里的边列表,edges
的每个元素都是一个长度为 2 的 vector<int>
,表示一条边。
所以:
for (auto& e : edges) {int x = e[0], y = e[1];...
}
就相当于:
for (vector<int>& e : edges) {int x = e[0]; // 边的起点int y = e[1]; // 边的终点
}
🧩 3️⃣ 所以 auto
在这里就是为了省事
如果手写完整类型,要写:
for (vector<int>& e : edges)
用 auto
:
for (auto& e : edges)
完全等价,编译器会推导出来。
✅ 总结一句话
auto
就是让编译器帮你自动写类型,尤其是复杂容器(vector<vector<int>>
)时非常省心。e
的实际类型是vector<int>
,所以能像数组一样e[0]
、e[1]
。这段写法就是在遍历边列表,把每条边拆成起点
x
和终点y
。