次の質問セグメンテーション違反の実行方法別の問題で停止しました。
与えられた:
Cluster * base;
Cluster * absorbed;
list<Cluster>::iterator li = clusters.begin();
// li is then pointed to some element.
absorbed = &(*li); // Get a pointer to the chosen element.
base->joinCluster(absorbed); // Perform an action with absorbed.
// li contines the cycle and now point to clusters.end()
// Now, absorbed should be deleted from list. li doesn't point to absorbed anymore.
li = & (* absorbed);
clusters.erase(li);
上記の逆を実行しようとしましたが、g++ はエラーを返します:error: no match for 'operator=' in 'li = absorbed'
どうすればこれを行うことができますか?
リスト内のすべての要素を循環して再度見つけることを避けようとしていますabsorbed
。
編集:
absorbed = &(* li);
li
申し訳ありませんが、 afterが まで循環し続けることを言い忘れていたことを理解していますclusters.end()
。そのため、サイクルが終了した時点で、もうli
指していabsorbed
ません。2 つの選択肢があると思います。要素clusters
を見つけるためにすべての要素をもう一度循環しabsorbed
ます。または、absorbed
ポインタを利用して から要素を消去しますclusters
。しかし、どうすればこの 2 番目のオプションを実現できますか?