Implementeu un nou mètode de la classe List que rebi dos iteradors i intercanvii de posició els elements (items) apuntats per aquests iteradors. Això vol dir que cadascun d’aquests elements passarà a ocupar la posició dins la llista que ocupava l’altre element. Els iteradors no han de canviar. Per tant, cadascun ha de seguir apuntant a la mateixa memòria. Els valors dels elements tampoc han de canviar.
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. Haureu de buscar dins
list.hh les següents línies:
// Pre: it1,it2 apunten a elements de la llista implícita.
// Post: it1,it2 continuen apuntant als mateixos elements,
// i *it1, *it2 continuen valent el mateix que abans.
// però *it1 ocupa la posició que ocupava abans *it2,
// i *it2 ocupa la posició que ocupava abans *it1.
// A part d'això, res més ha canviat.
// No s'ha creat ni eliminat memòria.
// Descomenteu les següents dues linies i implementeu el mètode:
// void swapPositionsOfItems(iterator &it1, iterator &it2) {
// }
Descomenteu les dues linies que s’indiquen i implementeu el mètode. No toqueu la resta de la implementació de la classe, 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), i el podeu
compilar directament, doncs inclou list.hh.
Només cal que pugeu list.hh al jutge.
La entrada del programa és una seqüència d’instruccions del següent tipus que s’aniran aplicant sobre una llista que se suposa inicialment buida i dos iteradors it1, it2, que se suposen situats 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
it1++
it1--
it2++
it2--
*it1
*it2
swapPositionsOfItems
Se suposa que la seqüència d’entrada serà correcta (sense
pop_front sobre llista buida ni amb algun dels
iteradors apuntant al primer element de la llista, ni
pop_back sobre llista buida ni amb algun dels
iteradors apuntant a l’últim element de la llista, ni
++ ni sobre iterador apuntant al
end de la llista, ni
– sobre iterador apuntant al principi de la
llista, ni swapPositionsOfItems quan algun
dels iteradors apunta al end de la llista.
Fixeu-vos que el end de la llista no és
l’últim element 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 els mètodes abans esmentats.
Per a cada instrucció it1 o
it2, s’escriurà el contingut apuntat per
l’iterador. El programa que us oferim ja fa això. Només cal que
implementeu el mètode abans esmentat.
Input
push_front a it1-- push_back b it2-- *it1 *it2 swapPositionsOfItems *it1 *it2 it1-- *it1 *it2 swapPositionsOfItems *it1 *it2 push_back c it2++ *it2 it2++ *it1 *it2 swapPositionsOfItems *it1 *it2 swapPositionsOfItems *it1 *it2 it2-- it2-- it1++ it1++ *it1 *it2 swapPositionsOfItems *it1 *it2 it1++ *it1 it2-- *it2 swapPositionsOfItems *it1 *it2
Output
a b a b b b b b a b c b c b c c b c b a a a a
Input
push_front nk push_back gn push_front x push_back o it1-- pop_front push_back ir push_front wp *it1 pop_back push_back t it1++ push_back ap push_front v pop_front push_back v it1++ pop_front pop_front it2-- it1-- it1-- swapPositionsOfItems it2-- push_back p *it2 push_back p swapPositionsOfItems it1++ push_back d *it2 pop_front it2-- *it1 push_back iz swapPositionsOfItems *it1 it1++ pop_back push_front q *it2 pop_back it2++ swapPositionsOfItems push_front l *it1 push_front b push_front g push_back yo pop_front it1++ push_back y it2-- push_front g *it1
Output
o gn gn v v ap gn v