对于List
和Node
类,我有以下设计。我在这里并不特别在意执行效率,因此我使用的是递归函数而不是简单的循环。
shared_ptr<Node> Node::insert(int value) {
if (value == this->datavalue) {
// we have already seen this value: just count
datacount++;
return shared_from_this();
} else if (value < this->datavalue) {
// insert before current
auto newhead = shared_ptr<Node>( new Node(value) );
newhead->next = this->shared_from_this();
return newhead;
} else if (next == nullptr) {
// insert after current, and current is the tail
this->next = shared_ptr<Node>( new Node(value) );
return shared_from_this();
} else {
// insert after current, which is not the tail
auto newtail = next->insert(value);
this->next = newtail;
return shared_from_this();
}
};
void List::insert(int value) {
if (head == nullptr) // list is empty; make first node
head = shared_ptr<Node>( new Node(value) );
else // insert this value somewhere
head = head->insert(value);
};
在这里我不知道如何使用唯一指针。 Node::insert
例程在一种情况下返回shared_from_this
,在另一种情况下返回新节点。所以我有点需要unique_from_this
,我知道这个需求不存在。
我可以保持这种设计,还是应该在列表上写一个大的while循环?
我在上面确实应该使用make_shared
。