2015-08-30 91 views
0

我试图通过载体邻居的矢量进行迭代,并只显示其内容。通过迭代子向量

上下文:图论。 邻居[i]是包含顶点i的所有相邻顶点的向量。在这个例子中,图形是完整的图形$ K_5 $ 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 
+2

用'* it'替换'neighbors [i] [* it]''。 – Quentin

回答

2

如果neighbors[i]是载体本身,在第一循环的尝试,*it它实际上是向量元素,所以你可以cout << *it,你就会有正确的结果。

+0

哦,对!谢谢。我所有的一切都是STL的一天碰撞课程,所以我仍然犯了一些愚蠢的错误。 – user2520385