我尝试创建一个Graph类,并希望将所有边缘打印到屏幕上。但我在迭代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循环有一个问题,但我找不到错误...
答案 0 :(得分:3)
看起来内部循环增加了错误的迭代器。可能需要:
for (vector<Node*>::iterator j = i->begin(); j != i->end();++j)
答案 1 :(得分:0)
你在第二个循环的每次迭代中递增“i”而不是j。
答案 2 :(得分:0)
vector<vector<Node*>>::iterator i = nodes.begin()
如果查看Graph :: nodes的声明,它是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;
}
}
}