Sunteți pe pagina 1din 14

CAPITOLUL 7

Functii si clase template

Functii si clase generice

1.Soluţiitemplate2.Funcţiitemplate3. Clasetemplate4.
Parametriifuncţiilorşiclaselortemplate5.Tratareaelementelortemplate6.Soluţiitemplate
pentruimplementareacolecţiilorde dateCAP. 7

CAP. 7

7.1. Soluţiitemplate

Functii si clase generice

ObiectiveleprincipaleurmăriteînlimbajulC++aufostgenericitateaşireutilizareacodului.Aceste obiective au
fost atinseprin introducerea a două mecanisme: Mecanismul moştenirii, care permite extinderea
funcţionalităţii claselor existente şi reutilizarea codului compilat; Mecanismul “template”, care permite
reutilizarea codului sursă.

CAP. 7

7.1. Soluţiitemplate

Functii si clase generice

Mecanismul “template” nu a făcut parte din forma iniţială a limbajului C++, fiind introdus de abia în
1990; în momentul actual, acest mecanism face parte din propunerea de standardizare a limbajului C++.

CAP. 7

7.1. Soluţiitemplate

Functii si clase generice

Considerentulprincipalcareaconduslaapariţiasoluţiilor“template”afostimposibilitateadeareutilizacodulpe
ntrumoduleaicăroralgoritmiaufostimplementaţi,datoritătipurilordeparametricarediferădelaoimplementa
relaalta.Caexemplu,deşialgoritmulpentruofuncţiedeordonareesteacelaşi,codulsursătrebuierescris(“adap
tat”)pentrufuncţiacareordoneazăîntregi,pentrufuncţiacareordoneazăalfabeticnumeleunorpersoanesaup
entrufuncţiacareordoneazăpersoaneledupăvârstaacestora.

8
CAP. 7

7.1. Soluţiitemplate

Functii si clase generice

Înideeadeaobţineuncodsursăcâtmaigeneral,limbajulvineînsprijinulprogramatorului,oferindu-
iposibilitateadeadefinifuncţiişiclase(tipuri)generice(engl.“template”).Mecanismul“template”poatefiaplic
atatâtfuncţiilor(algoritmilor),câtşiclaselor(tipurilordedate).

Template-
urile(şabloanele)permitdefinireaunorfamiliideclase(tipuri)saufuncţiigenerice,încaretipurilededateasupra
căroraseopereazăsuntspecificatecaargumente.

CAP. 7

7.1. Soluţiitemplate

Functii si clase generice

Forma generală de declarare a unui template este:

template <lista_argumente> declaratie

unde:lista_argumenteconţine unul sau mai multe argumente formale, separate prin virgulă, fiecare
definit prin tipul argumentului şi numele lui, iar declaratietrebuie să declare sau să definească o funcţie
sau o clasă.

10

CAP. 7

7.1. Soluţiitemplate

Functii si clase generice

Argumenteleformale:-
detippredefinitdinlistadeargumenteseintroducprinnumeletipuluiurmatdenumeleargumentului,-
detipdefinitdeutilizator(clase)seintroducprinspecificatorulclassurmatdenumeleargumentului.De
exemplu, o declaraţie de template poate arăta în felul următor:

template<class X, class Y, ints> declaratie

X şi Y sunt argumente de tip (clasă) şablon (template), iar s este argument întreg.

Functii si clase generice

11

1.Soluţiitemplate2.Funcţiitemplate3. Clasetemplate4.
Parametriifuncţiilorşiclaselortemplate5.Tratareaelementelortemplate6.Soluţiitemplate
pentruimplementareacolecţiilorde dateCAP. 7
12

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice

Funcţiile template sunt asemănătoare expresiilor macro, utilizând diferiţi parametri. Pentru a înţelege
despre ce este vorba, să considerăm exemplulcare îşi propune să implementeze o funcţie generică
(template) de comparare a două numere întregi, a două numere reale, adouă obiecte de tip cercşi a
două obiecte de tip dreptunghi. Funcţia va primi ca argumente referinţe către datele de comparat şi o va
returna pe cea mai mare dintre ele.

13

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice

Deşi algoritmul implementat este acelaşi, funcţia trebuie rescrisă pentru fiecare tip de parametri cu care
trebuie să lucreze. Exerciţiul7.1.:

//implementarepentrucomparareade intregiintmai_mare_dintre(int& x1, int& x2) {if (x1>x2) return x1;


else return x2;} //implementarepentrucomparareade realidoublemai_mare_dintre(double& x1, double&
x2) {if (x1>x2) return x1; else return x2;} //implementarepentrucomparareade
cercuricercmai_mare_dintre (cerc& x1, cerc& x2) {if (x1>x2) return x1; else return x2;}

14

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice

//implementarepentrucomparareade dreptunghiuridreptghmai_mare_dintre (dreptgh& x1, dreptgh&


x2) {if (x1>x2) return x1; else return x2;} Evident, pentru clasele cerc şi dreptgh trebuie supraîncărcat
operatorul >.class cerc{ Punctcentru; // poatefi utilizataclasaPunctimplementatadeja. double raza;
public: //. . . . . . intoperator > (constcerc&c) const; }; intcerc::operator > (constcerc&c) const{if
(raza>c.raza) return 1; else return 0;}

15

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice


class dreptgh{ double Lung, lat; public: //. . . . . . dreptgh(double l1=0, double l2=0) {Lung=l1; lat=l2;}
double aria() const{return Lung*lat;} intoperator > (constdreptgh&c) const; }; intdreptgh::operator >
(constdreptgh&c) const; {if (aria()>c.aria()) return 1; else return 0; } Procedând astfel, efectuăm –de fapt
-munca aflată în spatele unei soluţii template.

16

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice

Este mult mai avantajos şi mai natural să scriem o singură funcţie generică (template), care să fie
specializată pentru fiecare tip de parametri. Pentru realizarea automată a acestui lucru, compilatorul
trebuie informat că definiţia funcţiei este “outline”; informarea compilatorului se realizează prin
specificaţiile template.

17

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice

Funcţiatemplate vafi:template <class Obiect> Obiect mai_mare_dintre(Obiect& x1, Obiect& x2) {if
(x1>x2) return x1; else return x2; }

18

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice

Prefixul template <class Obiect> specifică declararea unui template (clasă, tip) cu un argument cu
numele Obiect. După această introducere, Obiect este folosit exact la fel ca orice tip de date, în tot
domeniul clasei template declarate. Cum “lucrează” compilatorul? Întâlnirea cuvântului cheie template,
semnalează prezenţa unei funcţiisau a unei clase template.Compilatorul suspendă procesul normal
folosit pentru generarea secvenţelor de instrucţiuni. După citirea definiţiei, îşi construieşte o
reprezentare internă a modelului generic.

19

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice


Aşa cum se observă din exerciţiul prezentatparametriifurnizaţi funcţiei mai_mare_dintre, sunt de forma:
template <class Obiect>. Tipul Obiecteste prefixat de cuvântul cheie class, fiind el însuşi un tip generic.
Fiind deja “atenţionat”, compilatorul “caută” numele tipului de date generic şi “adaptează” porţiunile de
cod în care apar date de acest tip.

20

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice

Considerăm programul de test a funcţiei template implementate în exerciţiul anterior: intmain()


{ dreptgh D1(10, 20), D2(20, 30); dreptghD3=mai_mare_dintre(D1, D2);//versiuneacu paramde tip
dreptgh

21

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice

//. . . . . . . double a1, a2; cin>>a1>>a2; cout<<mai_mare_dintre(a1, a2); //versiuneacu paramde tip
double inti1, i2; cin>>i1>>i2; cout<<mai_mare_dintre(i1, i2); //versiuneacu paramde tip int}
Dupăoverificareprealabilăacoduluisursă(pentrudepistareaeventualelorfuncţiisautipuritemplate),laîntâlni
rea(apelul)uneifuncţiitemplate,compilatorulgenereazăodeclaraţieaversiuniispecializateafuncţieipentruti
pulparticulardedatecareaparecaargument.

22

CAP. 7

7.2. Funcţiitemplate

Functii si clase generice

Functii si clase generice

23

1.Soluţiitemplate2.Funcţiitemplate3. Clasetemplate4.
Parametriifuncţiilorşiclaselortemplate5.Tratareaelementelortemplate6.Soluţiitemplate
pentruimplementareacolecţiilorde dateCAP. 7

24

CAP. 7

7.3. Clasetemplate

Functii si clase generice


Aşa cum s-a observat deja din exemplele prezentate, nu numai funcţiile pot fi generalizate, ci şi tipurile
de date (clasele), obţinându-se astfel clasele template (clase generice sau tipuri parametrizate).

25

CAP. 7

7.3. Clasetemplate

Functii si clase generice

Unele limbaje (de exemplu, Pascal), au tablouri mărginite. Un programator poate defini un astfel de
tablou specificând atât marginea inferioară, cât şi cea superioară pentru indexul de acces al tabloului. De
exemplu, dacă la declararea unui astfel de tablou se specifică limitele 5 şi 9 (indexul va trebui să se afle
în intervalul [5,9]), încercarea de a accesa elementul de indice 20, va genera o eroare (ulterior, la fiecare
accesare a elementelor tabloului se verifică dacă elementele cerute există).

26

CAP. 7

7.3. Clasetemplate

Functii si clase generice

O astfel de structură este uşor de manevrat folosind o clasă template (Array). Definim un template care
este parametrizat de tipul elementului care urmează a fi reţinut de vector. Ulterior putem avea tablouri
de caractere, de întregi sau de orice altă structură definită de utilizator.

27

CAP. 7

7.3. Clasetemplate

Functii si clase generice

Declarareaclaseitemplate(caşiîncazulfuncţieitemplate)

începecucuvântulcheietemplate,urmatdetipulparametrizat,specificatîntre<>.

La fiecare“instanţiere” a claseigenerice, tipulgeneric vafi “înlocuit” cu un tip concret.


Specificareatipuluiconcret(utilizarea) se face sub forma unui

parametru(sauargument) al claseitemplate: Ex. Array <int> a(3,7);

28

CAP. 7

7.3. Clasetemplate

Functii si clase generice


Observaţii:1. Utilizarea template-urilor nu implică mecanisme run-time, ci doar generarea de către
compilator a fiecarei clase care corespunde tipului (sau tipurilor) de date folosit la declararea unui
obiect. Substituţia de tipuri are loc în etapa de compilare.2. O clasă template specifică modul în care pot
fi construite clase individuale, diferenţiate prin tipul sau tipurile de date asupra cărora se operează.3.
Toate funcţiile membre ale unei clase template sunt funcţii template, adică funcţii care definesc un set
general de operaţii care vor fi aplicate unor tipuri de date diferite. În afară de funcţiile template membre
ale unei clase, se pot defini şi funcţii template nemembru, care definesc familii de funcţii în acelaşi mod
în care clasele template definesc familii de clase.

Functii si clase generice

29

1.Soluţiitemplate2.Funcţiitemplate3. Clasetemplate4.
Parametriifuncţiilorşiclaselortemplate5.Tratareaelementelortemplate6.Soluţiitemplate
pentruimplementareacolecţiilorde dateCAP. 7

30

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

Aşacum dejas-a subliniat, atâtfuncţiile, câtşiclaseletemplate primescparametri.

Pentru specificarea parametrilor furnizaţi unei funcţiigenerice, sintaxa generală este:

template <<par1>, <par2>, …>

31

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

Parametriipot fi: tipuride date (predefinite, definite de utilizator); constante. Parametri tipuri de date
sunt furnizate prin numele lor, prefixat de cuvântul cheie class.Orice parametru care nu are drept prefix
cuvântul class este considerat, în mod automat, constantă.

32

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

Exemplu:
template<classT>template<intDim_Vect,intDim_Elem>template<classtip_Elem,longDim,classComparato
r>ObservămcăparametriiT,tip_Elem,Comparatorsuntdetipurinecunoscute(generice),urmândcaacestetipu
risăfieinstanţiateulterior.Tipulnuestespecificatexplicit,devenind,elînsuşi,unparametru.Caşiîncazulfuncţiil
orgenerice,pentruclaseletemplate,acesteapotfiinstanţiate,oriundeestenecesarăprecizareaunuitipdedată.

33

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

În particular, declaraţiile template pot apărea în definirile de tip, typedef: Exemplu:

//1 Stack <int> istack; // generareauneistivede intregiStack <float> fstack; // generarea unei stive de
reali Stack <char> fstack; // generareauneistivede caractere//2 typedefStack <float> Stack_float;
Stack_floatfstack;

34

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

Observaţie:

Tipurile concrete cu care sunt substituite tipurile generice ale funcţiilor şi claselor template, pot fi tipuri
predefinite sau tipuri definte de utilizator. Dintre tipurile predefinite, pot face parte şi pointerii către
funcţii, ca în exemplul:Exemplu:

void f1(void) { ... } template <class T, void(*PointerToFunction)(void)> class MyClass{ T *anAttribute;


public: MyClass() { PointerToFunction(); } }; main() { MyClass<int,f1> anObject; }

35

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

În situaţiile în care o clasă conţine un atribut de tip altă clasă template, această clasă trebuie să fie şi ea
declarată template, dupa cum ilustrează exemplul:Exemplu:

template <class T1, class T2> class CClass{ T1 t1; T2 t2; ... }; template <class T1, class T2> class
MyClass{ CClass<T1,T2> myAttrib; ... };

36

CAP. 7
7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

S-ar putea ca în unele cazuri, în clasa în care folosim o clasă template, să nu avem nevoie de toate
tipurile generice ale acelei clase. Atunci, acele tipuri care vor fi nefolosite vor fi declarate void.Exemplu:

template <class T1, class T2> class CClass{ T1 t1; T2 t2; ... }; template <class T> class
MyClass{ CClass<void,T> myAttrib; ... };

37

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

Parametri funcţiilor şi claselor template, pot fi şi constante.Se implementează clasa Tablou, în care
dimensiunea maximă a tabloului este parametru (constant) al clasei template. Exerciţiu:

template <class T, intcMax> class Tablou{ private: T *tablou; intmaxElem; public: Tablou() :
maxElem(cMax) { tablou= new T[cMax]; } ~Tablou() { delete []tablou; } T& operator[] (intindex) { return
tablou[index]; } void AfiseazaTablou(); };

38

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

template <class T> void Tablou<T>::AfiseazaTablou() { for(int i = 0; i< maxElem; i++) cout<< tablou[i] << "
"; cout<< endl; } main() { Tablou<float, 5> t1; Tablou<char, 10> t2; Tablou<int, 20> t3; Tablou<char, 10>
t22; t1[0] = 12.35; t2[1] = 35.12; t2[0] = 'i'; t3[0] = 3; t1.AfiseazaTablou(); }

39

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

RESTRICŢII LA TRANSMITEREA PARAMETRILOR O sursă de confuzii, în momentul utilizării funcţiilor


template, o constituie apelul unor astfel de funcţii, în care argumentele nu se încadrează în nici o
implementare a funcţiei respective, dar sunt posibile simple conversii de tip.În astfel de situaţii, vom
primi mesaje de avertisment din partea compilatorului.

40

CAP. 7
7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

RESTRICŢII LA TRANSMITEREA PARAMETRILOR La apelul funcţiilor template, tipurile parametrilor efectivi


trebuie să conicidă, întocmai, cu cele ale parametrilor formali. Cu alte cuvinte, la apelul funcţiilor
template nu se fac nici un fel de conversii ale parametrilor. Exemplu:

// 1 template<class Object> void quicksort(Object d[],intleft,intright) {// . . . } main( ) { intx1[10];


quicksort(x1, 0, 5U); // eroare} Apeluldin main, încare al treileaparametruestede tip unsigned int(şinu
int), vagenera eroare!

41

CAP. 7

7.4. Parametriifuncţiilorşiclaselortemplate

Functii si clase generice

RESTRICŢII LA TRANSMITEREA PARAMETRILOR // 2 template <class T> voidg1(T t1, T t2) { ... } main()
{ g1(1,1); // corect: T1 si T2 de tip int. g1(12.34, 56); // eroare: T1 de tip double, T1 de tip int!!! }

Functii si clase generice

42

1.Soluţiitemplate2.Funcţiitemplate3. Clasetemplate4.
Parametriifuncţiilorşiclaselortemplate5.Tratareaelementelortemplate6.Soluţiitemplate
pentruimplementareacolecţiilorde dateCAP. 7

43

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

Una dintre problemele pe care le implică utilizarea elementelor template este poziţia codului
corespunzător acestora.Aşa cum s-a subliniat anterior, ca şi în cazul funcţiilor inline, pentru elementele
template, codul iniţial este “expandat”. Observaţia principală este că mecanismul de instanţiere a
funcţiilor templateeste valabil doar în situaţia în carecodul sursă este organizat într-un singur
fişier(clasele şi funcţiile template).

44

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice


Pentru a putea instanţia o clasă template, compilatorul trebuie să poată avea acces la corpul funcţiilor
membre sau la membri statici utilizaţi de template. Cu alte cuvinte, codul template trebuie să fie vizibil
acolo unde sunt utilizate elemente template.Dacă o aplicaţie este organizată în mai multe fişere,
deoarece elementele template au fost introduse relativ recent, nu există acelaşi mod de tratare din
partea compilatoarelor şi a linkeditoarelor.

45

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

Prinutilizareadirectivelorde compilare(“pragma”), înfuncţiede compilator,


programatorulpoatespecifica“unde” şi“cum” vorfi instanţiateelementeletemplate. Prin #pragma, se pot
defini directive specifice unui anumit sistem (software). Forma generală:

#pragma <nume_directiva>

În cazul în care compilatorul nu recunoaşte directiva, o ignoră, negenerând eroare sau atenţionare.

46

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

Printre directivele pragma recunoscute de către mediul Borland C++, se află:

#pragma option <optiuni>

Prezenţa acesteia determină lansarea compilatorului, cu aceste opţiuni. Această directivă se introduce în
codul sursă.

47

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

Deşi elementele template sunt tratate de către compilatoare şi linkeditoare în mod diferit, există două
metode de bază: Metoda template smart, prin care întregul cod ataşat unei clase template (declaraţii,
definţii ale elementelor template şi a membrilor statici) se plasează în header; căutarea duplicatelor
rămâne în seama compilatorului. Metoda template manual, prin care declaraţiile elementelor template
se plasează în header, iar implementarea –într-un fişier separat.
48

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

În cazul metodei template smart, compilatorul iniţializează elementele template în funcţie de necesităţi
şi asigură existenţa unei singure copii a fiecărei iniţializări în momentul linkeditării (în cazul includerii
multiple a aceluiaşi fişier header). De exemplu, pentru mediul Borland C++, metoda poate fi specificată
în două moduri: Prinopţiuneade compilare–Jg; Prin opţiunea “Smart Template“ (opţiune implicită) din
meniul “C++ options”.

49

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

În cazul metodei template manual, prin “pragma option”, se specifică următoarele opţiuni ale
compilatorului: Opţiunea –Jgd, care anunţă compilatorul că urmează o definire publică a instanţierilor
unor elemente template (dde la define);

Opţiunea -Jgx atenţionează asupra caracterului extern al declaraţiilor instanţierilor de tip template (xde
la extern).

50

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

AVANTAJELE SOLUŢIEI TEMPLATE Avantajelemajoreale soluţiilortemplate sunt: Oferă posibilitatea


reutilizării codului sursă. Scrierea codului se realizează într-un mod natural, asemănător implementării
unei clase obişnuite (partea dificilă este rezolvată de către compilator).

51

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

AVANTAJELE SOLUŢIEI TEMPLATE


Avantajelemajorealesoluţiilortemplatesunt(cont.):Nuexistăniciunfelderestricţiilegatedetipulgeneric.Eve
ntualeleinadvertenţeîntretipulgenericşicelconcretvorfisemnalatelacompilaresaulinkeditare.Decelemaim
ulteori,problemeleapardatorităfaptuluicăpentrutipurileconcrete(tipuridedatedefinitedeutilizator)nuaufo
stsupraîncărcaţianumiţioperatori.

52

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

AVANTAJELE SOLUŢIEI TEMPLATE Avantajelemajoreale soluţiilortemplate sunt(cont.): Depanarea se


poate face fără nici un fel de probleme, exact ca şi în cazul claselor obişnuite.Mecanismul claselor
template este o soluţie extrem de eficientă pentru implementarea claselor de tip container. Prin
specificarea sub forma de parametru a tipului de date ce va fi conţinut de container se asigură o
eficienţă maximă atât din punctul de vedere al celui ce implementează clasa (scrie codul o singură dată,
pentru un tip generic), cât şi din punctul de vedere al celui care o utilizează (acesta trebuie doar să indice
-la fiecare instanţiere -tipul informatiei utile stocate).

53

CAP. 7

7.5. Tratareaelementelortemplate

Functii si clase generice

DEZAVANTAJELE SOLUŢIEI TEMPLATE Printrepuţineledezavantajeale soluţiilortemplate, se pot


evidenţia:Codul sursă, în urma expandărilor realizate de către compilator, poate ajunge la dimensiuni
foarte mari. Diferenţelede tratarea coduluiîntrediferitecompilatoare. Precauţiila
transmitereaparametrilorgenerici.

Functii si clase generice

54

1.Soluţiitemplate2.Funcţiitemplate3. Clasetemplate4.
Parametriifuncţiilorşiclaselortemplate5.Tratareaelementelortemplate6.Soluţiitemplate
pentruimplementareacolecţiilorde dateCAP. 7

55

CAP. 7

7.6. Soluţiitemplate pentruimplementareacolecţiilorde date

Functii si clase generice

Una din modalităţile cele mai frecvent utilizate de creare a colecţiilor sigure ca tip (type-safe) pentru
obiecte de orice tip de date, este prin utilizarea claselor template. Clasa sau clasele care descriu forma
colecţiei (vector, listă, etc.) se definesc ca şi clase template, având ca argument tipul de date din care se
vor crea colecţiile respective. La declararea unei colecţii pentru un tip dat ca argument, compilatorul
creează colecţia de forma dată de clasa template pentru tipul de date primit ca argument. Nu se folosesc
conversii explicite de pointeri, astfel încât aceste clase de colecţii sunt sigure ca tip.

56

CAP. 7

7.6. Soluţiitemplate pentruimplementareacolecţiilorde date

Functii si clase generice

Se obţin astfel colecţiile parametrizate. Exemple de astfel de colecţii sunt colecţiile de tip şir (vector,
listă, stivă, coadă) sau colecţii de tip mulţime (Set, Map). Diferenţierea este dată de
implementare:•implementarea unui vector cu liste sau cu masive; •implementarea unui şir asociativ
(map) cu tabele de dispersie sau cu arbori), •pentruregăsirea elementelor se utilizează iteratorii.

57

CAP. 7

7.6. Soluţiitemplate pentruimplementareacolecţiilorde date

Functii si clase generice

Biblioteca STL(Standard Template Library) este biblioteca C++

pentru colecţii, care foloseşte tipuri parametrizate pentru genericitate

şi defineşte diverse tipuri de colecţii şi iteratorii ataşaţi. Exemple de tipuri parametrizate din
STLsunt:Vector(şir unidimensional de elemente de tip T), List(listă dublu înlănţuită de elemente de tip T),
Queue(coadă de elemente de tip T), Dequeue(coadă cu 2 capete de elemente de tip T), Stack(stivă de
elemente de tip T), Map(şir asociativ de elemente de tip T), Set(mulţime neordonată de elemente de tip
T), Bitset(şiruri de biţi).

58

SFARSITUL Capitolului7

CAP. 7Functii si clase generice

PROGRAMAREACALCULATOARELORŞILIMBAJEDE PROGRAMAREII

1.Conceptede bazaale programariiorientate


peobiecte2.Clasesiobiecte3.Supraincarcareaoperatorilor4.Creareaierarhiilorde clase5.Operatiide intrare/
iesirein limbajulC++6.Implementariale modelelorde
date7.Functiisiclasegenerice8.ExceptiisitratareaacestoraCuprinsulCursului

Programareacalculatoarelorşilimbajede programareII

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