6

std::list定期的にマージされるアイテム (グラフ コンポーネント構造) を構築します。アイデアは、2 つのコンポーネントを接続するノードを発見すると、それらが 1 つのコンポーネントになり、リストにコンポーネントが列挙されるというものです。std::list<component>::iterator各コンポーネントには、マージされると設定される「親」コンポーネントへのハンドル (この場合は) があります。このように、特定のノードが属するコンポーネントを判別するには、このチェーンをたどります。

最後に、私が探しているのは、 item のイテレータを取り、それをリストから削除することを可能にする操作ですが、割り当てstd::list解除することはありません: リストの残りの構造は、普通に取り外します。N

できれば、アイテムを再割り当てし、リストからコピーして、実数removeまたはerase.

おそらく私はそれを達成することができspliceます。削除する要素を「がらくた」にスプライスする必要がありlistますね。

4

1 に答える 1

1

これはスプライスで行うことができます。たとえば、*itジャンク リストに移動します。

junk.splice(junk.begin(),comp_list,it);

move-ctor を に追加することもできますcomponent。次に、リストから内容を削除する前に、次のように tmp var に移動します。

component  tmp(*it);
li.erase(it);

また、コンポーネント (または) へのポインターのリストを使用するという Fomin Arseniy の提案もstd::shared_ptr良いです。

于 2012-12-20T10:24:15.307 に答える