我正在创建一个简单的图表,其中所有节点(或顶点)都收集到一个列表中。每个节点依次都有一个指针列表,这些指针可能指向第一个列表中的多个其他节点并调用这些边。例如,假设我有一个简单的图,A -> B
然后A -> C
NodeA
将有一个指向B
和C
作为边的指针列表。
在创建图表时,我首先创建节点,并使用与该节点相关的任何内容(权重或任何其他属性)填充它。然后我将该节点添加到所有节点的“主”列表中。之后,我将该节点的地址(现在是列表中的最后一个对象)传递给一个函数以添加到任何父节点:
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);}
我遇到的问题是边缘列表指向列表对象的副本,而不是列表本身中的实际对象:
注意:根节点的地址(命令提示符输出)通过以下方式找到:
for (list<Vertex>::iterator it = MasterListOfNodes.begin(); it != MasterListOfNodes.end(); it++)
{
cout << "Name: " << it->getName() << " | Address: {" << &(*it) << "}" << endl;
}
如何创建指向主节点的边列表?