0

私は次のような構造を持っています

struct Employee 
{ 
 char   uName  [255]; 
 struct   Employee *  next; 
 struct   Employee *  prev; 
};

一度に100個の構造オブジェクトのメモリを割り当ててから、それらを1つずつ使用してリンクリストを作成します。メモリが完全に消費された場合は、もう一度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::vector、とstd::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

newクラスのanddelete演算子をオーバーライドします。

new既存のプールを調べて、空きオブジェクトがあるかどうかを確認する必要があります。ない場合は、プールを割り当てる必要があります。次に、そこから割り当てられたメモリを返します。

delete提供されたオブジェクトが割り当てられたプールを確認する必要があります。オブジェクトがまだ割り当てられている場合、プールは残ります。そうでない場合は、削除できます。

また、C ++を使用しているので、本格的なクラスの使用を検討してください(違いはほとんどありませんが)

于 2012-08-23T19:15:42.487 に答える