通过二维矢量进行迭代

Iterate through 2d vector

本文关键字:迭代 二维      更新时间:2023-10-16

我试图创建一个Graph类,并希望将所有边打印到屏幕上。但我在迭代二维向量时遇到了一个问题。

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循环有问题,但我找不到错误。。。

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

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

您在第二个循环的每次迭代中递增"i",而不是j。

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;
         }
     }
}