6

我构建了一个std::list定期合并在一起的项目(图形组件结构)。这个想法是,如果我发现一个连接两个组件的节点,它们将成为一个单独的组件,并且我的列表会枚举我的组件。每个组件都有一个std::list<component>::iterator指向其“父”组件的句柄(在本例中为 ),该句柄在合并后设置。通过这种方式确定特定节点所属的组件,我沿着这条链走。

最后,我正在寻找的是std::list允许我获取 item 的迭代器N并将其从列表中删除但不释放它的操作:列表其余部分的结构的修改方式与正常删除它。

最好是比重新分配项目、从列表中复制它并调用真实的removeerase.

也许我可以用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 回答