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.