1

プログラムが SIGBART エラーをスローする理由がわかりません。

この関数が呼び出されたときに絞り込みました。

bool Node::isEdgeConnected(Node vertex1, Node vertex2){

//I'm not sure if this is the right way to copy this vector <list>
vector<list<Node> > myEdgeList = *edgeList;//edgeList is a private data member of Node

vector<list<Node> >::iterator it;
cout << myEdgeList.size();


for (it = myEdgeList.begin(); it != myEdgeList.end(); it++) {
    list<Node> edge;
    edge = *it;
    Node placeNode = edge.front();

    cout <<placeNode.getNodeId()<<endl;
    list<Node>::iterator eIt;
    for (eIt = edge.begin(); eIt != edge.end(); eIt++) {
        Node placeNode1, placeNode2;
        placeNode1 = edge.front();
        placeNode2 = *eIt;

        cout << placeNode1.getNodeId() << " " << placeNode2.getNodeId()<<endl;
        if(placeNode1.getNodeId() == vertex1.getNodeId() &&
           placeNode2.getNodeId() == vertex2.getNodeId()){
            return true;
        }
    }
}
return false;

}

どんな助けでも大歓迎です。

4

1 に答える 1

0

ほとんどの場合、コードは行で失敗します。が空かNode placeNode = edge.front();どうかを確認する必要がありますedge

if (edge.empty()){
   continue;
}
Node placeNode = edge.front();

ところで、isEdgeConnected()関数はノード内edgeListの値をチェックするだけで、すべての要素をコピーする必要はありません。あなたedgeListが大きい場合、コピーは高価になります。

たとえば、edgeList直接反復することもできます。また++iter、`iter++ よりも効率的です。これを参照してください

for (vector<list<Node> >::iterator it = edgeList->begin();                                       
     it != edgeList->end(); ++it) {
}
于 2012-12-09T01:06:42.533 に答える