Je dois implémenter une liste ordonnée bidirectionnelle d'une manière spécifique, et je me suis coincé. J'ai une classe Bag qui a une classe Element à l'intérieur. Maintenant, le problème est quand je veux placer un objet dans le sac.Implémentation d'une liste ordonnée bidirectionnelle, comment renvoyer un pointeur pour lui donner une valeur?
Un élément a une clé (sa valeur), un pointeur vers l'élément le plus petit (_down) et un vers le plus grand (_up). Quand je mets un nouvel élément à l'intérieur du sac le code est le suivant (les noms traduits il est donc plus facile à comprendre)
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;
}
}
Le problème est que P-> vers le bas() est incessible. Je suppose que je devrais retourner le pointeur par référence, mais je ne sais pas comment faire cela.
fonction vers le bas()
Bag::Element *Bag::Element::down() {
return _down;
}
J'ai essayé de mettre & à de nombreux endroits, mais je ne peux pas comprendre comment faire fonctionner le tout.
Voici le code complet si nécessaire, mais ses variables sont pour la plupart hongroises, je fournirai la traduction si nécessaire. Header on the left, cpp on the right
Hmm Je suis inquiet ... et si vous ajoutez 2 à votre liste en premier puis 3? e serait plus grand que 2, et donc p = p-> up(), mais l'élément p-> up() devrait être nul, donc votre p-> key() serait déréférencé null ne le serait-il pas? – Eddge
Je n'ai pas encore travaillé sur la procédure de mise en place lorsque j'ai posé la question, je voulais juste que ça marche. Mais vous avez raison, le code que j'ai posté ici n'est pas encore définitif (pas même proche). – Viktor