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:
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;
}
Il problema me lo da sempre con la lista realizzata con vettore dove invece di scrivermi <1,2,3> mi stampa <1,2,1>
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:
codice:
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);
}
}
}
Nel caso servisse per capirci di più il codice completo sarebbe questo qui: http://ideone.com/KHCmF
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.