遍历子向量

Iterating through sub-vectors

本文关键字:向量 遍历      更新时间:2023-10-16

我正在尝试迭代向量邻居的向量,并简单地显示其内容。

上下文:图论。neighbors[i]是一个包含顶点i的所有相邻顶点的向量。对于本例,图是5个彼此相连的顶点的完全图$K_5$。

问题:我需要一个迭代器来遍历子向量,因为我(不应该)知道它们的长度,但是我得到了错误的答案。

<<p> 我尝试/strong>
for(int i = 0; i < num_vertices_h; ++i) {
   for(vector<int>::iterator it = neighbors[i].begin(); it != neighbors[i].end(); ++it) {
      cout << neighbors[i][*it] << " ";
   }
   cout << endl;
}

(错误)输出

2 3 4 -1454373456
0 3 4 -1454373584
0 1 4 0 
0 1 2 -1454373744
0 1 2 3

如果我只是作弊,使用我知道每个子向量有4个元素的事实,我可以避免迭代器:

作弊方案

for(int i = 0; i < num_vertices_h; ++i) {
   for(int j = 0; j < num_vertices_h -1; ++j) {
      cout << neighbors[i][j] << " ";
   }
   cout << endl;
}

正确的输出

1 2 3 4 
0 2 3 4 
0 1 3 4 
0 1 2 4 
0 1 2 3 

如果neighbors[i]本身是一个向量,在你的第一次循环尝试中,*it实际上是向量元素,所以你可以只使用cout << *it,你会得到正确的结果。