在保留分配的情况下删除std :: list中的项目

时间:2012-12-20 06:24:38

标签: c++ stl linked-list doubly-linked-list

我构建了一个std::list个项目(图形组件结构),它们会定期合并在一起。我的想法是,如果我发现一个连接两个组件的节点,它们就会成为一个组件,我的列表会枚举我的组件。每个组件都有一个句柄(在这种情况下是std::list<component>::iterator)到它的“父”组件,它在合并后设置。这种方式来确定特定节点所属的组件我走这个链。

最后我要找的是std::list上的操作,它允许我从列表中获取项目N的迭代器,并从中移除但是没有解除分配:列表其余部分的结构修改方式与正常删除它的方式完全相同。

最好不要重新分配项目,从列表中复制项目,调用真实removeerase

也许我可以用splice完成它。我需要将要删除的元素拼接成“垃圾”list,不是吗?

1 个答案:

答案 0 :(得分: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)也很好。