遍历子向量
Iterating through sub-vectors
我正在尝试遍历向量的向量 neighbors 并简单地显示其内容。
上下文: 图论。
neighbors[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
并且你将得到正确的结果。
我正在尝试遍历向量的向量 neighbors 并简单地显示其内容。
上下文: 图论。 neighbors[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
并且你将得到正确的结果。