我正在尝试迭代向量邻居的向量,并只显示其内容。
上下文:图论。 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
答案 0 :(得分:2)
如果neighbors[i]
是一个向量本身,在第一次循环尝试中,*it
它实际上是向量元素,因此您可以只cout << *it
并且您将拥有正确的结果