2012-01-23 7 views
0

Я пытаюсь создать класс графа и хочу напечатать все грани на экране. Но у меня проблема с итерацией 2d-вектора.Итерация через вектор 2d

class Graph 
{ 
public: 
    Graph(void); 
    ~Graph(void); 
    vector<Node*> nodes; 
    void addNode(Node node); 
    void addDirectedEdge(Node &head,Node* tail,int cost); 
    void toSrceen(); 
}; 

class Node 
{ 
public: 
    Node(char* name); 
    ~Node(void); 
    char* name; 
    vector<Node*> children; 
    vector<int> costs; 

}; 

void Graph::toSrceen() 
{ 
    for (vector<vector<Node*>>::iterator i = nodes.begin(); i != nodes.end();++i) 
    { 
     for (vector<Node*>::iterator j = i->begin(); j != i->end();++i) 
     { 
      cout << j->name; 
     } 
    } 
} 

Существует проблема в первом для цикла, но я не могу найти ошибку ...

+2

Какие проблемы? Намного легче найти, что не так, если нам не нужно догадываться о том, что пошло не так. –

+0

Добавьте пробел между углами закрытия '>>' –

+0

@ChristianAmmer, что ошибка компилятора была исправлена ​​в течение некоторого времени. – AJG85

ответ

3

Похоже, что внутренний цикл увеличивает неправильный итератор. Вероятно, должно быть:

for (vector<Node*>::iterator j = i->begin(); j != i->end();++j) 
+1

+1 глаз орла. Также стоит упомянуть, что 'const_iterator' следует использовать, когда это возможно. – AJG85

0

Вы увеличиваете «i» каждую итерацию второй петли, а не j.

+0

Ну, я просто ошибка копирования-вставки. Но я не могу скомпилировать код, потому что в цикле for компилятор ожидает вектор . Но каждый Узел имеет вектор . –

0
vector<vector<Node*>>::iterator i = nodes.begin() 

, если вы посмотрите на объявления Graph :: узлов, это vector<Node*>, не vector<vector<Node*>>

петля должна, вероятно, будет что-то вроде:

void Graph::toSrceen() 
{ 
    for (vector<Node*>::iterator i = nodes.begin(); i != nodes.end();++i) 
    { 
     Node* currNode = *i; 
     for (vector<Node*>::iterator j = currNode->children.begin(); j != currNode->children.end();++j) 
     { 
      cout << j->name; 
     } 
    } 
} 
+0

Спасибо ... Код компилируется сейчас. Но внутри цикла я получаю исключение «векторные итераторы несовместимы» :( –

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