gpt4 book ai didi

c++ - 内联 STL 类型列表管理器

转载 作者:行者123 更新时间:2023-11-28 02:53:33 25 4
gpt4 key购买 nike

假设我有一个 std::vector<MyObject>

现在我会不时地需要在列表中添加和删除其中的一些对象。我可以使用 STL 容器列表 std::list<MyObject*>甚至 std::vector<MyObject*>对于列表。

然而,如果这个列表经常变化,这将需要大量的内存分配和释放。

我通常做的是像这样定义 MyObject:

class MyObject 
{
stuff;
MyObject* next;
};

然后将对象手动链接到链表中,并根据需要取消链接对象。然而,这确实意味着每当我想执行此操作时,我都在手动编写一个链表,这很容易出错。

我最理想的是这样的:

class MyObject : public SomeListItem<MyObject> 
{
stuff;
};

与一些管理人员一起 SomeList<MyObject>类,我的列表的逻辑是照顾。这应该在没有任何内存分配的情况下发生,因为链接指针已经存在于 MyObject 中。

std或boost中是否存在这样的容器?

编辑问题是在我的算法过程中,我不断地创建和销毁大量预先存在的对象列表。使用嵌入到我的对象中的下一个指针意味着我可以使用这些列表而无需分配内存。

std::list 或 slist 需要内存分配,这会产生 Not Acceptable 开销。

最佳答案

您正在寻找的正是Boost Intrusive ,它提供链表和其他容器。它的工作方式与您描述的完全一样——您可以从它的基类继承,然后将您的对象链接到一个容器中。当然还有更多,更多的功能,毕竟它是 Boost。

关于c++ - 内联 STL 类型列表管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520303/

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