2015-08-30 3 views
0

Я пытаюсь перебирать вектор векторов соседей и просто отображать его содержимое.Итерация через подвектор

Контекст: Графическая теория. 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 записи, я могу избегать итератора:

Cheat Solution

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

Заменить 'neighbors [i] [* it]' с помощью просто '* it'. – Quentin

ответ

2

Если neighbors[i] является сам вектор, в первой попытке петли, *it это на самом деле элемент вектора, так что вы можете просто cout << *it, и вы будете иметь правильный результат.

+0

О, верно! Благодарю. Все, что у меня было, это дневной краш-курс на STL, поэтому я все еще делаю глупые ошибки. – user2520385

Смежные вопросы