通过2d向量迭代

问题描述:

我尝试创建一个Graph类,并希望将所有边缘都打印到屏幕上。但我有一个迭代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; 
     } 
    } 
} 

有一个在第一个for循环的一个问题,但我无法找到错误...

+2

什么样的问题呢?如果我们不必猜测出现了什么问题,那么发现错误就容易多了。 –

+0

在闭合角度之间增加一个空格'>>' –

+0

@ChristianAmmer编译器bug已经修复了一段时间。 – AJG85

它看起来像内环增加了错误的迭代器。可能需要:

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

+1老鹰的眼睛。另外值得一提的是,应尽可能使用'const_iterator'。 – AJG85

你正在增加“我”每次迭代的第二个循环,而不是j。

+0

嗯,我只是一个复制粘贴错误。但我无法编译代码,因为在for循环中,编译器期望矢量。但是每个节点本身都有一个向量。 –

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

如果你看一下图::节点的声明,这是一个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

谢谢...代码现在编译。但内循环我得到一个异常“矢量迭代器不兼容”:( –