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

Ste*_* Lu 6 c++ stl linked-list doubly-linked-list

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

最后,我正在寻找的是std::list允许我采用项目迭代器的操作N,并将其从列表中删除但不解除分配:列表其余部分的结构修改方式与完全相同.正常删除它.

最好不要重新分配项目,从列表中复制项目,以及调用真实项目remove或项目erase.

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

Leo*_*sky 1

您可以使用拼接来做到这一点。例如,移至*it垃圾列表:

junk.splice(junk.begin(),comp_list,it);
Run Code Online (Sandbox Code Playgroud)

您还可以将 move-ctor 添加到component. 然后,在从列表中删除内容之前,将内容移动到 tmp var,如下所示:

component  tmp(*it);
li.erase(it);
Run Code Online (Sandbox Code Playgroud)

Fomin Arseniy 使用指向组件的指针列表(或std::shared_ptr)的建议也很好。