我想创建一个有向图。每个Edge都有有关destination Nodeorigin Node的信息。此外,每个节点都具有有关incomingEdgesoutgoingEdges列表的信息。

我有一个图的adjacencyMatrix [] [],我想读取矩阵并创建一个新图。

这是代码;

  struct Node
    {
       vector<Edge *> incomingEdges;
       vector<Edge *> outgoingEdges;
    };

    struct Edge
    {

       struct Node destination;
       struct Node origin;

    };







for(int i=0; i<totalNodes; i++)
{
    struct Node nodei;
}








for(int i=0; i<totalNodes; i++)
{
    for (int j=0; j<totalNodes; j++)
    {
        if ( adjacencyMatrix[i][j] == 1)
        {
            struct Edge edgeij;
            edgeij.destination=nodej;
            edgeij.origin =nodei;
            nodei->outgoing.push_back(edgeij); // ???
            nodej->incoming.push_back(edgeij); // ???

        }
    }
}


我对C / C ++不熟悉。显然,我需要一些帮助来改进它。
如何将push_back返回到在结构体中声明的指针向量?

最佳答案

当您这样做时:

    if ( adjacencyMatrix[i][j] == 1)
    {
        struct Edge edgeij;
        edgeij.destination=nodej;
        edgeij.origin =nodei;
        nodei->outgoing.push_back(edgeij); // ???
        nodej->incoming.push_back(edgeij); // ???
    }


edgeij对象在该块的末尾被破坏,使其变得毫无用处(并且代码无论如何都不会编译,因为您尝试将对象推入需要指针的位置)

由于向量需要指针,因此应使用动态分配的Edge

    Edge* edgeij = new Edge;
    edgeij.destination=nodej;
    edgeij.origin =nodei;
    nodei->outgoing.push_back(edgeij);
    nodej->incoming.push_back(edgeij);
    // now, do not forget to properly delete resources allocated with new


更好的设计解决方案是完全避免使用原始指针,而更喜欢使用智能指针,例如std::vector<std::unique_ptr<Node>>

关于c++ - 用结构表示的有向图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24953341/

10-11 19:35