图形,顶点,STL列表:为什么列表是空的?

时间:2014-12-24 02:54:54

标签: c++

我之前发布过这个问题,但措辞严厉,这就是为什么它会有不好的反应。我会尽力清楚我要问的是什么。如果您不理解我的问题,请发表评论。我使用两个列表,一个用于保存顶点,另一个用于保存每个顶点的邻居。当我创建一个顶点时,我将它推入第一个列表。当我想创建边缘时,我在我的键中找到了顶点'列出并将相邻顶点添加到其邻居中。名单。我重复所有的边缘。但是,我的邻居名单总是空着。我检查它是否确实将顶点推入了邻居列表,并在addEdge函数中使用了print语句,这表明它确实进入了。当我稍后尝试访问它时,邻居列表总是空出来。为什么会这样?为什么第二个列表总是空的?记忆没有保留吗?

例如: 创建顶点1,2,3 [存储在键列表中]

创建边缘:1-1,1-2(2-1),1-3(3-1 [存储在邻居列表中]

找到1的边缘:找不到任何东西(为什么?)

我的实施。图类保存键列表,顶点保存邻居列表。我用来添加边的函数命名为:两个类中的addEdge。主要还打印顶点没有邻居。

1 个答案:

答案 0 :(得分:0)

核心问题是您传递值,修改它们的副本并期望修改原始值。特别是,问题是

  1. 您希望getV将非const引用返回给vertex<T>。请注意,名称get通常与不影响对象的const方法相关联。所以,您可能想稍微更改名称。
  2. graph::addEdge中,sKeydKey应该是vertex<T>&。此外,当您在addEdgesKey上致电dKey时,请传入您要添加的整个vertex<T>对象,而不是T类型的对象。目前的代码是编译的,因为T可以隐式转换为vertex<T>,但这不是你想要的。
  3. 最后,为什么要在vertex<T>中维护vertex的列表?将其更改为list<vertex<T>*>。请注意,如果您最终将graph中的数据结构从list更改为可能使迭代器和指向其元素的指针无效的其他内容,则此方法将失败。