當我遇到這個問題時,我想出了兩個選擇。在C++中實現List時聲明Node結構的地方
第一個是聲明List類中的Node結構。這就像:
class List
{
private:
struct Node
{
int data;
Node* next;
}
Node* head;
//...
public:
//....
}
對於這一個,它的工作好。公共區域中的函數可以利用Node結構中的所有元素進行插入,刪除等操作。另外,這樣可以防止用戶直接使用Node結構(我認爲如果我們在List中聲明Node,其他人不能使用這個結構,這是真的嗎?)。但是,如果這個節點非常一般,並且也會被堆棧,隊列等使用,我們必須每次都聲明它。這很不方便。另外,如果我想實現一些在List上工作的算法(例如排序),是否可以在沒有使用Node結構的情況下執行此操作?
第二個選擇是實現一個節點類:
class Node
{
private:
int data;
Node* next;
//...
public:
//...
}
class List
{
private:
Node* head;
//...
public:
//...
}
此一不工作,因爲我不能在類List的公共區域與功能改變指針和數據節點。如果我把data
和next
放在public
區的Node類,恐怕用戶還可以直接改變指針並銷燬列表。
人們在實施清單時通常會做什麼?感謝您的建議:-)
他們這樣做既不是因爲他們不推倒重來。他們使用'std :: list <>',甚至沒有選擇'std :: vector <>'或'std :: deque <>'。也就是說,除非必須將節點公開爲外部實體,或者將它與其他類共享爲* their *「node」類型,否則沒有理由使其成爲獨立單元。 – WhozCraig