假设我有一个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中是否存在这样的容器?
编辑问题是在我的算法过程中,我不断地创建和销毁大量预先存在的对象列表。使用嵌入到对象中的next指针意味着我可以使用这些列表而无需分配内存。
std::list或slist需要内存分配,这会产生不可接受的开销。
您正在寻找的正是Boost侵扰,它提供链表和其他容器。它的工作原理与您描述的非常相似——您可以继承它的基类,然后在容器中将对象链接在一起。当然,还有更多的功能,毕竟它是Boost。