我有一棵树的这段代码。 BST节点包含实际数据。 BST通过继承unique_ptr<BSTnode<Key,Data>>
来封装它们。 BST不会向该类添加任何新字段。
继承使之成为我的树是unique_ptr<BSTnode>
,但这是实现它的正确方法吗? BST的附加操作(例如rotate()/ insert()或remove())特定于数据结构。您不会也不应期望它们用于常规的unique_ptr,但这确实意味着BST不能与unique_ptr互换使用。
如果此实施策略不正确,该如何解决?
template <class Key, class Data>
class BST : public unique_ptr<BSTnode<Key, Data>>
{
using unique_ptr<BSTnode<Key, Data>>::unique_ptr;
// operations ...
};
template <class Key, class Data>
class BSTnode
{
friend class BST<Key, Data>;
public:
//constructors ...
protected:
Key key;
Data data;
BSTnode<Key, Data> *parent;
BST<Key, Data> left, right;
};
答案 0 :(得分:1)
template <class Key, class Data>
class BST
{
std::unique_ptr<BSTnode<Key, Data>> root;
// operations ...
};
任何人都不想使用您的BST类来替换unique_ptr
。这是一个单独的数据容器,恰好利用unique_ptr
来存储其数据。