Sunteți pe pagina 1din 27

Programare Orientată Obiect

in C++
C13 – STL

Alin ZAMFIROIU
alin.zamfiroiu@csie.ase.ro
Despre ce vorbim azi:

• STL – Standard Template Library:


• Containere;
• Iteratori;
• Algoritmi.
• RTTI
STL

• Standard Template Library – este o librărie de clase template care


ajută programatorul în procesul de implementare.

• Librăria conține clase pentru principalele structuri de date precum:


vector, listă, stivă, coadă, set, map, etc.
STL

• Aceste clase pot fi folosite atât pentru primitive sau pentru tipurile
definite de către programator.

• Unele clase o să impună anumite condiții cu privire la operatorii din


clasa folosită pentru tipul colecției.
STL

• Clasele din această librărie sunt împărțite în următoarele tipuri:


• Containere
• Iteratori
• Algoritmi

• Toate aceste clase lucrează cu tipuri template. Astfel le putem folosi


pentru orice tip fie primitive sau definite de noi.
Containere
• Sunt folosite pentru stocarea altor obiecte și conține metode pentru
prelucrarea acestor obiecte.

• Obiectele reținute în colecție în același timp sunt de același tip sau din
aceeași familie.

• Obiectele din colecție sunt prelucrate asemănător.


Containere
• Tipuri de containere:
• Secvențiale:
• vector: #include<vector>
• list: #include<list>
• deque: #include<deque>
• Asociative:
• set: #include<set>
• map: #include<map>
• Adaptive:
• stack: #include<stack>
• queue: #include<queue>
• priority_queue: #include<priority_queue>
Containere secvențiale
Containere secvențiale
Containere - SET

• Pentru parcurgere avem nevoie de un


iterator.
Containere - SET

• Problema care apare la utilizarea containerului SET pentru obiecte din


clasa noastră este că trebuie în cadrul clasei să avem “operator <“,
astfel încât elemente să fie sortate.
Containere - SET

• După adăugarea operatorului în cadrul


clasei eroarea o să persiste, deoarece
primul parametru (this) trebuie să fie
constant.
Containere - SET
• Pentru acest lucru ori facem operatorul în afara clasei și adăugăm
primul parametru ca și parametru constant sau declarăm funcția
constantă.

• Acum putem să folosim obiecte de tipul clasei în cadrul containerului


de tip SET.
Containere - MAP
• Un container de tipul MAP are pentru fiecare element o pereche de
tipul <cheie, valoare>.
• Pentru declararea containerului trebuie să specificăm tipul cheii și tipul
valorii.
• Pentru inserare este folosit pair, căruia trebuie de asemenea să îi
specificăm tipul pentru cele două elemente: cheie și valoare.
Containere - MAP
• Dacă dorim să folosim obiecte de tipul clasei noastre pentru poziția de
VALUE, nu avem nicio problemă.

• Avantajul unui map este dat de faptul că putem să indexăm


containerul după cheie.
Containere - MAP
• Problema apare dacă vrem să folosim obiectele pentru câmpul cheie.
Pentru a face acest lucru trebuie să avem implementat “operator<“.
Iteratori
• Sunt pointeri folosiți pentru a parcurge elementele/obiectele din
containere.
• Există iteratori predefiniți:
• ostream_iterator
• istream_iterator
• reverse_iterator
• insert_iterator
• Programatorul își poate defini iteratorii pentru containerele pe care le
folosește pentru a parcurge aceste containere.
Iteratori
• Pentru definirea unui iterator trebuie specificat tipul de container și
tipul datelor din containerul respectiv.
Iteratori
• Pentru containerul de tip map avem “first” pentru cheie, respectiv
“second” pentru valoare.
Algoritmi

• Sunt funcții template care prelucrează elementele containerelor,


indiferent de tipul acestora.

• Pentru accesarea elementelor din container funcțiile folosesc iteratori.


Algoritmi
• Funcții importante:
• copy();
• sort();
• find();
• transform();
• revert();
Algoritmi
• Dacă avem deja un vector inițializat putem să inițializăm și să copiem
elementele într-un nou vector.

• Putem să copiem doar un anumit număr de elemente.

• Acest lucru îl putem face și cu copy_n();


Algoritmi
• Cu ajutorul funcției sort() putem sorta un vector sau o listă de
elemente.

• Este foarte important să specificăm metoda cu ajutorul căreia se face


sortarea.
RTTI
• Run-Time Type Identification

• Este mecanismul de identificare a tipului unui obiect gestionat prin


pointer la bază, la Run-Time.

• Acest lucru este permis dacă avem ierarhii de clase și funcții virtuale în
cadrul ierarhiei.
RTTI

• Funcții utilizate:
• typeid();
• dynamic_cast<>();
RTTI
Mult success în
sesiune

S-ar putea să vă placă și