2012-12-05 227 views
2

我正在創建一個簡單圖形,其中所有節點(或頂點)都被收集到列表中。每個節點依次具有指向第一個列表中多個其他節點並指向這些邊的指針列表。例如,假設我有一個簡單的圖,其中A -> BA -> C,則節點A將具有指向BC的指針列表,因爲它是邊緣。當我創建圖形時,我首先創建節點,並用與該節點相關的任何內容(重量或任何其他屬性)填充該節點。然後將節點添加到所有節點的「主」列表中。在那之後,我再通過該節點(已經在列表中的最後一個對象)的地址到一個函數添加到任何父節點:如何創建指向另一個列表中的對象的指針列表?

AddChildNode(&MasterListOfNodes.back(), NameOfParent)

以下是添加子節點的代碼父

void GraphReader::AddChildNode(Vertex * const aChildVertex, const string aParent) 
{ 
    for(list<Vertex>::iterator it = MasterListOfNodes.begin(); it != MasterListOfNodes.end(); it++) 
    { 
     if(it -> getName().compare(aParent) == 0) 
     { 
      it -> addEdge(aChildVertex); 
      break; 
     } 
    } 
} 

凡addEdge簡單地添加新的兒童與父母「邊」的文章:

const void Vertex::addEdge(Vertex * aEdge) {mEdges.push_back(aEdge);} 

,我遇到的問題,是個在邊緣處的列表指向的列表對象的一個​​副本,而不是列表本身內的實際對象:

VS and Printout of Root Nodes and Edges

注:根節點的地址(命令提示輸出)被發現與如下:

for (list<Vertex>::iterator it = MasterListOfNodes.begin(); it != MasterListOfNodes.end(); it++) 
{ 
    cout << "Name: " << it->getName() << " | Address: {" << &(*it) << "}" << endl; 
} 

如何創建我指向主節點的邊的列表?

+0

@JerryCoffin要求(因爲這是一個類的任務)狀態沒有外部庫 – KronoS

+0

你可以在'AddChildNode(&MasterListOfNodes.back(),NameOfParent)'之前添加操作嗎?這是不太可能的,你在那裏做錯了什麼,但以防萬一...還有,你有什麼原因爲節點添加到'MasterListOfNodes',但從'mInternalGraph'打印它們? – Zeta

+0

@Zeta是一個複製麪食錯誤。抱歉。 – KronoS

回答

0

當你使用:list<Vertex>然後列表數據結構將負責管理如何頂點的存儲在內存中

你需要使用的是:list<Vertex *>

例子:

int main() 
{ 
    Vertex * a = new Vertex (..); 

    list<Vertex*> v(); 

    v.add(a); 

    if (a == v[0]) 
    { 
     // both points at the same Vertex in memory 
    } 

    return 0; 
} 
相關問題