gpt4 book ai didi

c++ - 删除 std::list 中的项目,同时保留分配的项目

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:15 26 4
gpt4 key购买 nike

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

最后我要找的是std::list上的操作这让我可以使用项目 N 的迭代器, 并将其从列表中删除但不释放它:列表其余部分的结构的修改方式与正常删除它的方式完全相同。

最好是比重新分配项目、从列表中复制它并调用真正的 remove 更简单的东西。或 erase .

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

最佳答案

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

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

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

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

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

关于c++ - 删除 std::list 中的项目,同时保留分配的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13966453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com