我正在尝试用C ++实现图表类的相邻列表。目前我想编写一个方法,它将更新Graph节点和每个相邻节点的相邻列表。你能告诉我这段代码有什么问题吗?当我执行我的程序时,相邻节点仍然没有在其相邻列表中调用update_adjacent的节点。 提前谢谢。
void Graph::update_adjacent(list<Graph>l) {
for (list<Graph>::iterator iterator = l.begin(), end = l.end(); iterator != end; ++iterator) {
adj_list.push_back(*iterator);
(*iterator).adj_list.push_back(*this);
}}
答案 0 :(得分:0)
您在列表中使用自动存储空间。这意味着每次执行adj_list.push_back(* iterator)时,都会复制列表中迭代器指向的对象(而不是保持对迭代器指向的对象的引用)。在下一行,当您在迭代器的对象邻接列表中插入* this时,先前存储在this-&gt; adj_list中的副本会过时。 为了解决您的问题,我建议您开始使用unique_ptr&lt; Graph&gt;代替Graph,因此,从list&lt; Graph&gt;中更改方法参数和adj_list成员属性。列出&lt; unique_ptr&lt; Graph&gt;&gt;。