我构建了一个std::list
个项目(图形组件结构),它们会定期合并在一起。我的想法是,如果我发现一个连接两个组件的节点,它们就会成为一个组件,我的列表会枚举我的组件。每个组件都有一个句柄(在这种情况下是std::list<component>::iterator
)到它的“父”组件,它在合并后设置。这种方式来确定特定节点所属的组件我走这个链。
最后我要找的是std::list
上的操作,它允许我从列表中获取项目N
的迭代器,并从中移除但是没有解除分配:列表其余部分的结构修改方式与正常删除它的方式完全相同。
最好不要重新分配项目,从列表中复制项目,调用真实remove
或erase
。
也许我可以用splice
完成它。我需要将要删除的元素拼接成“垃圾”list
,不是吗?
答案 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
)也很好。