【发布时间】:2012-08-19 08:51:54
【问题描述】:
我有一个结构
struct Employee
{
char uName [255];
struct Employee * next;
struct Employee * prev;
};
我想一次分配 100 个结构对象的内存,然后一个一个地使用它们,我制作一个链表。如果内存被完全消耗,那么我想再次分配 100 个对象内存
我正在做分配
struct Employee * chunk=new struct Employee[100];
现在,当我想向链表添加一个新节点时,我想从这个已分配的内存中获取对象。有人可以告诉我如何实现这一点
Employee * pEmployeeData=NULL;
for(long int i=1;i<=100;i++)
{
pEmployeeData=EmployeePool+i;
pEmployeeData->next=NULL;
pEmployeeData->prev=NULL;
InsertAtEnd(pEmployeeData);
}
InsertAtEnd在链表末尾插入节点。请告诉如何实现
【问题讨论】:
-
我最初删除了 C++ 标签,因为它看起来像 C,但后来我看到了“新”。伙计,在 C++ 中有更好的方法来做这种事情。
-
@JamesMcLaughlin 确实有 - 为
struct employee重载new和 delete` 运算符以进行池分配是常见的。 -
为什么不使用标准库
std::list中已经存在的列表。当您需要更多时,只需在后面推送新条目。如果您一次想要多 100 个,只需循环添加 100 个。 -
您也可以使用
std::vector作为池,使用std::vector::reserve一次添加100 个条目。如果您真的希望它们也出现在列表中,请在分配它们后将它们添加到std::list。 -
顺便说一下,您的示例中的循环有问题,它可能应该从
i = 0变为i < 100。就像现在一样,您将不会获得池中的第一个条目,而您将在池外一步获得最后一个条目。更容易查看您是否会使用例如pEmployeeData=&EmployeePool[i];
标签: c++ linked-list heap-memory dynamic-memory-allocation