Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Biblioteca de sabloane standard

c


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

  • constructorul implicit (fara parametri)

vector();

creaza un vector vid

  • constructorul copiere

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

  • void push_back(T&); adauga un element la sfarsitul vectorului
  • void pop_back(); strege ultimul element al vectorului
  • int size(); da numarul de componente ale vectorului
  • bool empty(); are valoarea true daca vectorul este vid
  • operatorul [] si functia T& at(int) selecteaza un element al vectorului
  • T& front(); are ca rezultat primul component al vectorului
  • T& back();are ca rezultat ultimul component al vectorului

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

  • constructorul implicit

list();

defineste o lista vida

  • constructorul

list(list p);

creaza o lista in care copiaza elementele listei p

Fie T tipul elementelor listei. Functiile definite de clasa list sunt urmatoarele.

  • void push_back(T&); adauga un element la sfarsitul listei
  • void push_front(T&); adauga un element la inceputul listei
  • void pop_front(); sterge primul element din lista
  • void pop_back(); sterge ultimul element din lista
  • T& front(); are ca rezultat primul element din lista
  • T& back(); are ca rezultat ultimul element din lista

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

  • Constructorul implicit fara parametri

complex();

ce creaza numarul complex 0 + i 0

  • Constructorul copiere

complex(const complex<T>&);

Biblioteca defineste urmatorii operatori

  • cei patru operatori aritmetici +, - * , /
  • operatorii relationali = = si !=
  • operatorul de scriere <<. Numarul complex u + i v este scris    de operatorul << ca

(u, v)

  • operatorul de citire >>. Pentru citirea cu operatorul >> numarul complex u + i v este introdus ca

(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

  • T real();
  • T real(const complex<T>&);

dau partea reala a numarului complex, prima este functie membra a clasei

  • T imag();
  • T imag(const complex<T>&);

dau partea imaginara a numarului complex, prima este functie membra a clasei

  • complex <T> conj(complex<T>&);

are ca rezultat conjugatul numarului complex

  • T abs(complex<T>&);

da valoarea absoluta (norma) a numarului complex

  • T norm(complex<T>&);

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.



Document Info


Accesari: 1307
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )