Salve a tutti, cerco di spiegarvi al meglio il mio problema.
Ho tre tipi di implementazione di liste:
Liste con cursore, che sono state sviluppate con l'oggeto Liste;
Liste con puntatori, che sono state sviluppate con l'oggeto ListeP;
Liste con vettore, che sono state svluppate con l'oggetto List_vector;
Tutte inglobate in una superclasse che oltre a sviluppare in maniera virtuale i vari metodi di lettura e scrittura delle tre realizzazioni implementa anche altre funzioni.
Ho in oltre una funzione, che mi è stata data dal professore che dovrebbe sovracaricare l'operatore "<<" per stampare l'intera lista:
Il problema me lo da sempre con la lista realizzata con vettore dove invece di scrivermi <1,2,3> mi stampa <1,2,1>codice:template< class T, class P > ostream& operator<<(ostream& os, const liste_collegate<T,P> &l){ typename liste_collegate<T,P>::posizione p; p = l.primoLista(); cout << "["; while (!l.finelista(p)){ if (p != l.primoLista()) cout << ", " << l.leggilista(p); else cout << l.leggilista(p); p = l.succlista(p); } cout << ", " << l.leggilista(p); cout << "]" << endl; return os; }
Un'altro problema lo riscontro con un metodo della superclasse che è l'inverti, ovvero dovrebbe inveritre le posizioni di tutti gli elementi della lista. Ovvero se ho <1,2,3> dovrebbe invertirmeli in <3,2,1> . Funziona su tutte le realizzazioni tranne quella realizzata con i vettori che mi ristampa tutto esattamente così com'è. La funzione è questa qui:
Nel caso servisse per capirci di più il codice completo sarebbe questo qui: http://ideone.com/KHCmFcodice:template< class T, class P > void liste_collegate<T,P>::inverti() { posizione appo_testa; posizione appo_coda; int index; int lungh; tipoelem val_appo; if(listavuota()!=true) { lungh=lunghezza(); lungh=lungh/2; appo_testa=primoLista(); appo_coda=primoLista(); for(;finelista(appo_coda)==false;appo_coda=succlista(appo_coda)); appo_coda = preclista(appo_coda); for(index=0;index<lungh;index++) { //val_appo = spazio[appo_testa].elemento; val_appo = leggilista(appo_testa); //spazio[appo_testa].elemento = spazio[appo_coda].elemento; scrivilista(leggilista(appo_coda), appo_testa); //spazio[appo_coda].elemento = val_appo; scrivilista(val_appo, appo_coda); appo_testa=succlista(appo_testa); appo_coda=preclista(appo_coda); } } }
Qui il main che uso per i test:
http://ideone.com/gAWHz
P.S: So che è un pò lungo il codice completo, e forse è questo il motivo per cui pure io mi sto un pò fondendo.
Vi ringrazio in anticipo,
Neptune.


Rispondi quotando