我必须以特定的方式实现双向有序列表,并且我陷入了困境。我有一个Bag类,里面有一个Element类。现在问题出现在我想要将物品放入包中时。实现一个双向有序列表,我该如何返回一个指针,以便给它一个值?
一个元素有一个键(它的值),一个指向较小元素的指针(_down),另一个指向较大的(_up)。当我把一个新的元素袋子里面的代码如下(名称翻译,以便更容易理解)
void Bag::put(int e) {
if(_item_count==0){
Element *element = new Element(e, nullptr, nullptr);
_bot = element;
_top = element;
}else{
Element *p = _bot;
while(e > p->key()){
p = p->up();
}
Element *element = new Element(e, p, p->down());
p->down() = element;
}
}
所以问题是,P->向下()是不可转让。我想我应该通过引用返回指针,但我不知道该怎么做。
下()函数
Bag::Element *Bag::Element::down() {
return _down;
}
我试图把&在许多地方,但我不能想出如何使这一切工作。
这里是完整的代码,如果需要的话,但它的变量主要是匈牙利语,如果需要,我会提供翻译。 Header on the left, cpp on the right
嗯我很担心......如果你先把2加到你的清单上然后再加上3,该怎么办? e会大于2,因此p = p-> up(),但p-> up()元素应该为null,所以你的p-> key()会被解引用null。 – Eddge
当我问这个问题时,我还没有把它放进去的实际程序,我只是想让它工作。但是你是对的,我在这里发布的代码还不是最终的(甚至没有接近它)。 – Viktor