我之前发布了这个问题,但措辞不当,这就是为什么 react 不佳的原因。我会尽量弄清楚我在问什么。如果您不明白我的问题,请发表评论。我正在使用两个列表,一个用于保存顶点,另一个用于保存每个顶点的邻居。当我创建一个顶点时,我将它插入第一个列表。当我想创建边时,我在我的“键”列表中找到顶点并将相邻顶点添加到它的“邻居”列表中。我重复所有边缘。但是,我的邻居列表总是空的。我检查它是否确实使用 addEdge 函数中的打印语句将顶点插入邻居列表,这表明它确实进入了。当我稍后尝试访问它们时,邻居列表总是空的。为什么会这样?为什么第二个列表总是空的?内存没有保留吗?
例如: 创建顶点 1、2、3 [存储在键列表中]
创建边:1-1、1-2(2-1)、1-3(3-1【存储在邻居列表中】
求 1 的边:什么都找不到(为什么?)
我的实现。图类保存键列表,顶点保存邻居列表。我用来添加边的函数在两个类中都被命名为:addEdge。 main 还打印顶点没有邻居。
最佳答案
核心问题是您在传递值、修改它们的拷贝并期望原始值也被修改。特别是,问题是
- 你想要
getV
返回对vertex<T>
的非常量引用.注意名字get
通常与const
相关联不影响对象的方法。因此,您可能想稍微更改一下名称。 - 在
graph::addEdge
,sKey
和dKey
真的应该是vertex<T>&
.此外,当您调用addEdge
在sKey
和dKey
,传入整个vertex<T>
要添加的对象,而不是T
类型的对象.就目前而言,代码编译是因为T
可以隐式转换为vertex<T>
但这不是你想要的。 - 最后,您为什么要维护
vertex<T>
的列表?在vertex
?将其更改为list<vertex<T>*>
秒。请注意,如果您最终更改了graph
中的数据结构来自list
对于可能使迭代器和指向其元素的指针无效的其他东西,这种方法将失败。
关于c++ - 图、顶点、STL 列表 : Why does list come out empty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27630834/