Biblioteca de sabloane standard
Clase generice
Clasele din biblioteca de sabloane standard sunt clase generice in care tipurile datelor si functiilor sunt parametri. O clasa generica se defineste cu instructiunea template cu forma
template <class T1, class T2, ., class Tn>
class nume_clasa
;
In aceasta definitie T1, T2, ., Tn sunt tipuri ce se pot utiliza la declararea de obiecte de tipul clasei generice. Un obiect de tipul unei clase generice se declara cu urmatoarea diagrama sintactica
nume_clasa <tip1, tip2, ., tipn> nume_obiect;
Problema 1. Sa definim o clasa generica X ce poate calcula patratul u 333j99d nui numar intreg sau real. O reprezentare a clasei este cea de mai jos. In aceasta reprezentare tipul T este parametrul clasei X. Definitia clasei este cea de mai jos.
# include <iostream>
using namespace std;
template <class T>
class X
T square()
T geta()
Sa definim obiecte de tipul X ce contin elemente de tip int sau double utilizand clasa generica X. Programul de rezolvare a problemei este cel de mai jos.
int main()
Clasa generica vector
Clasa generica vector implementeaza vectori cu elemente de un anumit tip. Un obiect de tip vector are un numar initial de componente si dimensiunea lui creste daca este nevoie. Clasa vector are ca parametru tipul componentelor vectorului.
Clasa defineste urmatorii constructori
vector();
creaza un vector vid
vector(vector p);
creaza un vector in care copiaza elementele vectorului p care este parametru
Fie T tipul componentelor vectorului (parametrul clasei generice). Clasa defineste urmatoarele functii
Mentionam ca un vector poate avea doua sau mai multe elemente egale. Clasa vector este definita in biblioteca <vector>.
Problema 2. Sa cream si sa listam un vector cu componente intregi. Programul este urmatorul.
# include <iostream>
# include <vector>
using namespace std;
int main()
Rezultatele rularii programului sunt cele de mai jos.
3. Liste
Clasa generica list implementeaza o lista dublu inlantuita, adica o lista ce poate fi parcursa in ambele sensuri. Lista poate avea oricate elemente de acelasi tip. Prototipul clasei este definit in biblioteca <list>. Clasa defineste urmatorii constructori
list();
defineste o lista vida
list(list p);
creaza o lista in care copiaza elementele listei p
Fie T tipul elementelor listei. Functiile definite de clasa list sunt urmatoarele.
3.1 Parcurgerea listelor
Pentru parcurgerea componetelor unei liste se pot utiliza iteratori. Un iterator este un pointer la un element al listei. O lista poate fi parcursa in sens direct sa in sens invers.
Parcurgerea listelor in ordine directa
Pentru parcurgerea unei liste in ordine directa se utilizeaza clasa iterator care este o clasa interna a clasei list. Un obiect de tipul acestei clase se defineste astfel
list<tip>::iterator nume_obiect;
Operatiile implementate de clasa iterator sunt cele prezentate in paragraful anterior. Pentru parcurgerea directa a listelor clasa list defineste functiile
begin();
end();
ce au ca rezultat un iterator ce indica primul element al listei si respectiv ultimul element al listei.
Parcurgerea listelor in ordine inversa
Pentru parcurgerea inversa a listelor se utilizeaza clasa reverse_iterator care este tot o clasa interna a clasei list. Un obiect de tipul acestei clase se defineste ca
list<tip>::reverse_iterator nume_obiect;
Operatiile implementate de clasa iterator sunt cele prezentate in paragraful anterior.
Clasa list defineste functiile
rbegin();
rend();
ce au ca rezultat un iterator pentru parcurgerea in sens invers a listei ce indica ultimul element al listei si respectiv primul element al listei.
3.2 Sortarea listelor
Pentru sortarea in ordine directa si inversa a listelor clasa list defineste functiile
void sort();
void reverse();
ce sorteza elementele listei in ordine directa si inversa.
Problema 3. Vom crea o lista cu elemente intregi, o vom sorta ascendent si descendent si vom afisa elementele listei. Programul este urmatorul.
# include <iostream>
# include <list>
using namespace std;
int main()
Rezultatele rularii programului sunt cele de mai jos.
4. Numere complexe
Biblioteca de sabloane standard defineste clasa complex pentru lucrul cu numere complexe. Prototipul acestei clase este definit in biblioteca <complex>. Clasa are ca parametru T, tipul double sau float al perechii de numere reale ce definesc numarul complex. Clasa defineste urmatorii constructori
complex();
ce creaza numarul complex 0 + i 0
complex(const complex<T>&);
Biblioteca defineste urmatorii operatori
(u, v)
(u, v)
Clasa defineste urmatorii operatori de atribuire
Biblioteca defineste urmatoarele functii matematice standard care au ca argumente numere complexe
asin sin exp pow
acos cos log sqrt
atan tan log10
Biblioteca defineste urmatoarele functii
dau partea reala a numarului complex, prima este functie membra a clasei
dau partea imaginara a numarului complex, prima este functie membra a clasei
are ca rezultat conjugatul numarului complex
da valoarea absoluta (norma) a numarului complex
da patratul valoarii absolute (normei) a numarului complex
Probleme propuse
Problema 1. Sa se defineasca o lista de siruri de caractere. Se va parcurge lista in ambele sensuri si se vor sorta componentele in ordine crescatoare.
Problema 2. Se va crea un vector cu elementele siruri de caractere. Se vor lista componentele vectorului in ordine directa si in ordine inversa.
Problema 3. Fie numerele complexe 1.2 + 3i si -2.1 + 6.3i. Sa se faca un program care sa calculeze suma, diferenta, produsul si catul numereleor complexe.
Problema 4. Fie functia
Sa se calculeze valorile functiei pentru s luand valori de la 0i la 100i cu pasul 5i.
|