2016-10-19 4 views
0

C++でグラフクラスの隣接リストを実装しようとしています。現時点では、グラフノードと隣接するすべてのノードの隣接リストを更新するメソッドを記述したいと思います。このコードスニペットで何が間違っているのか教えてください。私のプログラムを実行しているとき、隣接ノードは依然として隣接リストに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

あなたのリストには自動ストレージが使用されています。これは、イテレータが指すオブジェクトへの参照を保持するのではなく、リスト内のイテレータが指すオブジェクトをコピーしているadj_list.push_back(* iterator)を実行するたびに行われることを意味します。次の行で、* thisをイテレータのオブジェクト隣接リストに挿入すると、以前にthis-> adj_listに保存されていたコピーが古くなってしまいます。 はあなたの問題を解決するために、私はあなたがグラフの代わりに<グラフ>をunique_ptrを使用して起動するとこのように提案し、メソッドの引数と< >グラフ< unique_ptrを>を一覧表示するリスト<グラフ>からadj_listメンバー属性を変更します。