[英]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.