通过迭代子向量
问题描述:
我试图通过载体邻居的矢量进行迭代,并只显示其内容。通过迭代子向量
上下文:图论。 邻居[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
答
如果neighbors[i]
是载体本身,在第一循环的尝试,*it
它实际上是向量元素,所以你可以cout << *it
,你就会有正确的结果。
+0
哦,对!谢谢。我所有的一切都是STL的一天碰撞课程,所以我仍然犯了一些愚蠢的错误。 – user2520385
用'* it'替换'neighbors [i] [* it]''。 – Quentin