簡體   English   中英

使用指向結構C ++的指針創建動態分配的數組

[英]Create Dynamically Allocated Array with Pointers to Structs C++

因此,我目前有一個將在HashMap中使用的簡單結構(鏈表):

struct Node {
    std::string key, value;
    Node* head;
}

我目前正在嘗試動態分配帶有指向每個結構的指針的數組。 這就是我現在所擁有的...

Node* nodes = new Node[100]

我知道這會在內存中分配一個由100個節點組成的數組(稍后將需要刪除); 但是,在迭代時嘗試橫穿這些節點(我將其實現為鏈接列表)...

for (int x = 0; x < 100; x++) {
    Node current = nodes[x]; // Problem is I wanted an array to node pointers. This is not a pointer.
    while (current != nullptr) { // this isn't even legal since current is not a pointer.
        // DO STUFF HERE
        current = current.next; // This is not a pointer access to a method. I'm looking to access next with current->next;
    }
}

希望我足夠清楚。 有人可以分配動態的結構指針數組嗎? 到目前為止,我已經能夠動態分配結構數組,而不是結構指針數組。

有兩種方法。 要么分配一個結構數組,然后再引入一個指針,該指針將指向將充當頭部角色的數組中的元素。

例如

Node *head = nodes;

(在這種情況下,頭部指向節點[0])

在不需要列表之后,您必須使用運算符將​​其刪除

delete [] nodes;

或者您確實可以分配一個指向這樣的結構的指針數組

Node **nodes = new Node *[100];

但是在這種情況下,數組的每個元素又應該是指向動態分配對象的指針;

要刪除列表,您首先必須刪除數組元素所指向的每個對象,例如在循環中

for ( int i = 0; i < 100; i++ ) delete nodes[i];

然后刪除數組本身

delete [] nodes;

例如,分配數組時,最好用零初始化數組的每個元素

Node **nodes = new Node *[100]();

我建議您使用以下結構:

class myList {

struct Node {
string value;
Node* next;
}

/*Public methods .. Add/Set/Get/Next/isEmpty.. etc ... */
Node* head, *tail;
};

在主要: myList* lis = new myList[number]; 那么您就有列表數量了! 並按方法和運算符在類中完成所有工作,例如,如果您要下一個節點,只需調用lis[0].getNext(); 如果要跳過當前節點,請執行lis[0].Next(); ...等..

這種工作方式,您嘗試做的就像是C程序!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM