gpt4 book ai didi

c++ - 如何创建指向另一个列表中对象的指针列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:36 24 4
gpt4 key购买 nike

我正在创建一个简单的图形,其中所有节点(或顶点)都收集到一个列表中。每个节点依次有一个指针列表,这些指针可以指向第一个列表中的多个其他节点并调用这些边。例如,假设我有一个简单的图,其中 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;
}

如何创建指向主节点的边列表?

最佳答案

当您使用: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;
}

关于c++ - 如何创建指向另一个列表中对象的指针列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com