通过子向量迭代

时间:2015-08-30 10:10:49

标签: c++ iterator graph-theory

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

上下文:图论。 neighbors [i] 是包含到顶点i的所有相邻顶点的向量。对于此示例,图形是5个顶点的完整图形$ K_5 $,它们彼此连接。

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

我的尝试

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 

1 个答案:

答案 0 :(得分:2)

如果neighbors[i]是一个向量本身,在第一次循环尝试中,*it它实际上是向量元素,因此您可以只cout << *it并且您将拥有正确的结果