Mètode de llistes per intercanviar (swappejar) la posició de dos elements apuntats per iteradors

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.old.hpp, a on hi ha una implementació de la classe genèrica List.
En primer lloc, haureu de fer:

    cp list.old.hpp list.hpp

A continuació, haureu de buscar dins list.hpp 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.
    // 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.

La implementació d’aquest mètode hauria de consistir en modificar
punters. De fet, possiblement qualsevol implementació alternativa serà
massa lenta o produïrà error d’execució.

D’entre els fitxers que s’adjunten a l’exercici també hi ha program.cpp
(programa principal) i Makefile per a compilar. Per a pujar la vostra
solució, heu de crear el fitxer solution.tar així:

    tar cf solution.tar list.hpp

Entrada

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.

Sortida

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.

Informació del problema

Autoria: PRO1

Generació: 2026-01-25T21:19:57.889Z

© Jutge.org, 2006–2026.
https://jutge.org
