0

我有一个结构

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 在链表末尾插入节点。请告诉如何实现这一点

4

2 回答 2

2

我强烈建议您不要尝试通过编写自己的链表来重新发明轮子,而是查看包含可供您使用的现成容器类型的 C++ 标准库。(例如std::vectorstd::list)。

容器类型存在于 C++ 标准库中,用于存储数据/对象的集合。例如,您可以按照以下方式做一些事情

#include <iostream>
#include <vector>
#include <string>

struct Employee
{
    std::string name;
    int id;
};

int main()
{
    std::vector<Employee> my_employees;

    Employee fred = { "Fred", 1 };
    Employee bob = { "Bob", 2 };

    my_employees.push_back( fred );
    my_employees.push_back( bob );


    std::cout << my_employees[0].id << " " << my_employees[0].name << "\n"
              << my_employees[1].id << " " << my_employees[1].name << std::endl;
}

标准容器易于使用和学习(你会发现大量描述如何使用它们的互联网资源——你的书也应该告诉你!);如果您是 C++ 新手,那么在尝试创建自己的之前,最好先弄清楚如何使用它们。

于 2012-08-23T19:16:19.133 回答
0

您将为您的课程覆盖newanddelete运算符。

new必须查看任何现有的池并查看是否有任何空闲对象,如果没有,则需要分配一个池。然后,它将返回从它分配的内存。

delete需要检查提供的对象被分配到的池中。如果仍然在其中分配了任何对象,则池保持不变,否则可以将其删除。

此外,由于您使用的是 C++,请考虑使用完整的类(尽管差别很小)

于 2012-08-23T19:15:42.487 回答