c++ - 图、顶点、STL 列表 : Why does list come out empty?

标签 c++

我之前发布了这个问题,但措辞不当,这就是为什么 react 不佳的原因。我会尽量弄清楚我在问什么。如果您不明白我的问题,请发表评论。我正在使用两个列表,一个用于保存顶点,另一个用于保存每个顶点的邻居。当我创建一个顶点时,我将它插入第一个列表。当我想创建边时,我在我的“键”列表中找到顶点并将相邻顶点添加到它的“邻居”列表中。我重复所有边缘。但是,我的邻居列表总是空的。我检查它是否确实使用 addEdge 函数中的打印语句将顶点插入邻居列表,这表明它确实进入了。当我稍后尝试访问它们时,邻居列表总是空的。为什么会这样?为什么第二个列表总是空的?内存没有保留吗?

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

创建边:1-1、1-2(2-1)、1-3(3-1【存储在邻居列表中】

求 1 的边:什么都找不到(为什么?)

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

最佳答案

核心问题是您在传递值、修改它们的拷贝并期望原始值也被修改。特别是,问题是

  1. 你想要getV返回对 vertex<T> 的非常量引用.注意名字get通常与 const 相关联不影响对象的方法。因此,您可能想稍微更改一下名称。
  2. graph::addEdge , sKeydKey真的应该是 vertex<T>& .此外,当您调用 addEdgesKeydKey ,传入整个vertex<T>要添加的对象,而不是 T 类型的对象.就目前而言,代码编译是因为 T可以隐式转换为 vertex<T>但这不是你想要的。
  3. 最后,您为什么要维护 vertex<T> 的列表?在vertex ?将其更改为 list<vertex<T>*>秒。请注意,如果您最终更改了 graph 中的数据结构来自 list对于可能使迭代器和指向其元素的指针无效的其他东西,这种方法将失败。

关于c++ - 图、顶点、STL 列表 : Why does list come out empty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27630834/

相关文章:

C++: boost ptree相对键

c++ - 如何在 C++ 中使用插入符号 "^"进行求幂

数据透视表重复时的 C++ 分区整数

c++ - 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

c++ - C++ 入门练习 13.13,关于构造函数

python - 将 wxPython 与现有的 c++ Opengl 上下文一起使用

c++ - 未定义的静态模板函数引用

c++ - 将 GUI 附加到命令行工具

c++ - 从另一个模型中提取子模型?

c++ - 加载共享库 : libQt5Multimedia. so.5 时出错:无法打开共享对象文件:没有这样的文件或目录