马克·韦斯(Mark Weiss)的数据结构书中链接列表的实现使我有些困惑。
List类在内部包含一个Node结构,如下所示。
...
class List {
private:
struct Node {
...
};
...
public:
...
private:
int theSize;
Node *head;
Node *tail;
};
我的问题是,在List类内部确实有一个Node结构真的必要吗?我认为只要List类包含指向标头和尾节点的指针就足够了。将Node结构作为私有成员有什么优势?
谢谢!
答案 0 :(得分:5)
在List类中将Node结构声明为私有声明的原因是使其对实施保持私有。这将确保实现的特定细节不会泄漏到公共接口中。这是从内部实现细节中抽象接口的有效方法,可以使这些细节自由更改,而不会影响List类公共接口的用户。
答案 1 :(得分:0)
我的问题是,在List类内部是否真的需要一个Node结构?
没有必要,但是更好。
List::Node
可以与Set::Node
不同,后者可以与DList::Node
不同,而Map::Node
可以不同于Node
。在List
之外拥有List
类仅对实现ListNode
有用,这没有任何意义。您必须创建SetNode
,Node
等以使其成为不同的类型。
将List
作为嵌套类可以确保该类的详细信息特定于List
。
它不会污染在Node
的实现之外没有用的类型名称的全局名称空间。
它允许将private
设为List
至Node
。除非List
的实现选择这样做,否则List
的详细信息不会公开给.text
的用户。在大多数情况下,它不会暴露。