L3: Piles i Cues
Els exercicis d'aquesta sessió es resolen amb el Jutge.
Té interès fer servir la documentació de la llibreria estàndar de C++ per a stack<T>
i queue<T>
, per veure quins mètodes tenen i com s'utilitzen:
Preliminars
1. Compilació amb _GLIBCXX_DEBUG
Si es fa un programa amb un error com aquest:
stack<int> S;
S.pop();
el programa no abortarà l'execució de cop, però, tal com passa sovint amb accessos a caselles no existents d'un vector, l'execució pot continuar i donar resultats extranys o imprevisibles.
Per evitar-ho es pot compilar el codi definint la variable _GLIBCXX_DEBUG
. Per fer-ho s'utilitza la opció -D
així:
g++ -D_GLIBCXX_DEBUG -o programa programa.cpp
El fet d'utilitzar aquesta opció farà que, en cas d'error, el programa s'aturi i es mostri un missatge d'error que ens ajudarà a identificar quin és el problema. La documentació sobre aquesta opció té més informació sobre la depuració de programes que fan servir les classes de la llibreria de C++.
2. Treballar amb fitxers .tar
Un fitxer .tar
és simplement una concatenació de molts fitxers en un format que permet recuperar-los de nou individualment (i que per tant inclou la seva metainformació). De fet "tar" ve de "tape archiver", dels temps en què es guardaven còpies de les dades en cintes magnètiques!
Un .tar
és un contenidor, i és útil perquè és un estàndar ben establert i té moltes eines per manipular-lo. En el Jutge, els problemes de PRO2 sovint demanen un .tar
perquè cal fer enviaments que tenen més d'un fitxer.
Exemple
La següent comanda crea un fitxer .tar
amb tots els fitxers d'un directori anomenat projecte
:
tar -cvf projecte.tar projecte
Les opcions són:
-c
: per a crear un nou fitxer.tar
-v
: per a mostrar els fitxers que s'estan afegint-f
: per a indicar el nom del fitxer.tar
que es vol crear (en aquest casprojecte.tar
).
Si es fan servir moltes opcions alhora (-c
, -v
, i -f
), es pot posar només un guió i totes elles seguides (-cvf
). Com que la opció -f
és la que té un paràmetre (projecte.tar
en aquest cas), s'ha de posar la última.
El nom projecte
al final de la comanda indica que volem afegir tots els fitxers del directori projecte
al fitxer .tar
.
Extracció dels fitxers dins d'un .tar
Per extreure els fitxers d'un fitxer .tar
, cal anar a una carpeta on es vol recrear el contingut del fitxer .tar
original i executar:
tar -xvf projecte.tar
Si el fitxer és el mateix creat abans, això ompliria la carpeta projecte
amb els fitxers originals.
Exercicis
Piles:
- X96935: Palíndroms amb piles.
- X36902: Avaluacio d'una expressio amb parèntesis.
- X80203: Indexar seqüències ben parentitzades.
- X68213: Biblioteca.
Cues:
- X13425: Distribució justa de cues.
- P90861: Cues d'un supermercat (1).
- X38371: Estadístiques d'una seqüència d'enters amb esborrat del més antic.