Implementeu un nou mètode de la classe List per a moure
el contingut apuntat per un iterador a l’inici de la llista. En cas que
l’iterador ja apunti al primer element de la llista, llavors el mètode
no farà res. D’entre els fitxers que s’adjunten en aquest exercici,
trobareu list.hh, a on hi ha una implementació de la classe
genèrica List.
/**
* @pre 'it' apunta a algún elemento de la lista implícita no vacía.
*
* @post 'it' continua apuntando al mismo elemento, el cual ha sido movido
* al inicio de la llista. No se ha reservado ni liberado memoria.
* En el caso en que el elemento apuntado por 'it' ya fuese el
* primero, nada ha cambiado.
*/
void moveToBeginning(iterator &it)
(Trobareu la declaració de moveToBeginning al final del
fitxer list.hh, que és bastant llarg.)
No modifiqueu la resta de la implementació de la classe
List, excepte si, per algun motiu, considereu que
necessiteu afegir algun mètode auxiliar a la part privada. D’entre els
fitxers que s’adjunten a l’exercici també hi ha main.cc
(programa principal), que podeu compilar.
Els fitxers públics (icona del gatet) inclouen un .tar
amb main.cc, list.hh i un
Makefile. També s’inclou una còpia dels jocs de prova
públics per comoditat. A la carpeta on es descomprimeixin es pot:
compilar amb "make"; i testar amb
"make test".
El main.cc ja s’encarrega de llegir l’entrada, processar
les comandes i produir la sortida. Per entregar, només cal pujar al
Jutge el vostre fitxer list.hh modificat.
L’entrada del programa és una seqüència d’instruccions del següent tipus que s’aniran aplicant sobre una llista que inicialment està buida i un iterador que està situat inicialment al principi (i final) d’aquesta llista:
push_front s // s és un string
push_back s // s és un string
pop_front
pop_back
it++
it--
*it
moveToBeginning // el mètode que heu d'implementar
print_list // mostra la llista sencera a la sortida
Es pot suposar que la seqüència d’entrada serà correcta (és a dir:
sense pop_front ni pop_back sobre llista
buida, ni *it ni moveToBeginning tenint
it situat a l’end de la llista; tampoc hi
haurà pop_front just quan l’iterador estigui apuntant al
primer element de la llista, ni hi haurà pop_back just quan
l’iterador estigui apuntant a l’últim element de la llista; tingueu en
compte que l’últim element de la llista no és l’end de la
llista).
El programa principal que us oferim ja s’encarrega de llegir aquestes
entrades i fer les crides als corresponents mètodes de la classe
List. Només cal que implementeu el mètode abans
esmentat.
El programa principal ja s’encarrega de produir la sortida: per a
cada instrucció *it, escriu el contingut apuntat per
l’iterador; i per a cada instrucció print_list es mostra el
contingut de tota la llista.
Input
push_back a it-- *it print_list moveToBeginning print_list push_back b it++ *it print_list moveToBeginning print_list push_front c it++ *it print_list moveToBeginning print_list
Output
a a a b a b b a a c b a a c b