Sunteți pe pagina 1din 4

Programare orientată pe obiecte Curs 7

PROGRAMARE ORIENTATĂ PE OBIECTE

Standard Template Library (STL)


Standard Template Library (STL) reprezintă un set de componente specificate în
standardul ISO C++, având un comportament identic pentru orice implementare C++, independent
de platformă. Este practic biblioteca standard a limbajului C++ oferind cele mai uzuale structuri de
date şi algoritmi fundamentali pentru utilizarea lor.

Caracteristici

• Refolosire - posibilitatea de a opera cu tipuri de date definite de utilizator


• Compoziţia - posibilitatea de a opera cu tipuri de date definite în altă bibliotecă
• Eficienţa - performanțe mai bune decât implementările non-generice

Utilizând STL codul va fi portabil și mai ușor de citit, se va micşora timpul de


implementare, se vor putea folosi structuri de date deja implementate și testate.

În STL s-a evitat folosirea moştenirii şi a funcţiilor virtuale din considerente de performanţă,
deasemenea s-a evitat utilizarea operatorilor new şi delete în favoarea alocatorilor (permit metode
de control pentru alocare şi dealocare de memorie).

STL cuprinde trei elemente principale:


• Containeri – obiecte ce conţin obiecte
• Iteratori – pointeri „inteligenţi” pentru acces la elementele unui container
• Algoritmi – funcţionalităţi de acces şi prelucrare asupra elementelor containerilor.
Containerele sunt implementari ale unor structuri de date utilizate des . Aceste implementări
sunt în general eficiente, asigură gestiunea memoriei și au multe metode gata implementate. Cu toate
că au un set relativ limitat de structuri de date, sunt suficiente pentru aplicații practice. Uneori sunt
mai lente decât implementările specializate. Fiind simplu și eficient, un container oferă o serie de
avantaje, cum ar fi:
• are ataşat o mulţime de operaţii comune
• iterarori standard sunt disponibili pentru fiecare container
• implementează operaţii primitive.

Tipuri de containere
• Containere secvențiale - structuri de date liniare
o vector: implementează vectori alocați dinamic. (#include<vector>)
o list: implementează o listă liniară dublu înlănțuită. (#include<list>)
1
Programare orientată pe obiecte Curs 7

o deque: asemanator cu vector dar operațiile se pot efectua la ambele capete. Spre
exemplu permite adăugarea eficientă de elemente noi atât la început cît și la
sfârșit. (#include<deque>).
• Containere asociative – structuri de date non liniare, care pot identifica rapid elemente pe
baza perechilor cheie/valoare
o set: mulțime sortată de elemente unice (#include<set>)
o multiset: mulțime sortată de elemente (#include<set>)
o map: stochează perechi sortate de tip <cheie,valoare> în care cheia este
identificator unic (#include<map>)
o multimap: stochează perechi sortate de tip <cheie,valoare> (#include<map>)
• Containere adaptive
o stack: structură de tip stivă (#include<stack>)
o queue: structură de tip coadă (#include<queue>)
o priority_queue: structură de tip coadă în care elementelor le sunt asociate priorități
(#include<queue>)

Funcții membre comune


• constructor implicit
• constructor de copiere
• destructor
• empty
• max_size
• size
• operatorii: =, <, <=, >, >=, ==, !=
• begin, end, rbegin, rend, erase, clear
• push_front / pop_front (nu și pentru "vector")
• push_back / pop_back
• empty / size / clear
• front / back (referință la primul / ultimul element)
Pentru "vector" si "deque" sunt definite și metode de acces prin
subscripting:
• [] - Acces fara verificarea limitelor
• at - Acces cu verificarea limitelor

Iteratorii sunt obiecte care se comportă asemănător pointerilor şi care sunt utilizaţi pentru a
accesa elementele unui container. Iteratorii se aseamănă cu pointerii, dar sunt de fapt obiecte ce
adresează alte obiecte. Cu ajutorul lor pot fi adresate elemente ale containerelor care aparţin anumitor
intervale. Iteratorii reprezintă interfaţa de comunicaţie între algoritmi şi containere, fiind preluaţi ca
parametrii de către algoritmi. Containerele le furnizează algoritmilor o cale de acces către elementele
lor prin intermediul iteratorilor.

Algoritmii furnizează funcţionalităţi de acces şi prelucrare asupra elementelor


containerelor, cum ar fi: sortări, reordonări, modificări, copieri, căutări etc.

Algoritmii STL se împart în patru mari categorii:


• Algoritmi care modifică ordinea elementelor în container - modifying sequence operations:
copy(), replace(), transform() şi remove()
2
Programare orientată pe obiecte Curs 7

• Algoritmi care nu modifică ordinea elementelor în container – non-modifying sequence


operations: for_each(), find(), count() şi equal()
• Algoritmi de sortare şi operaţii similare: sort(), equal_range(), merge() şi includes()
• Algoritmi generali pentru operaţii numerice: min(), max()

Exemplu

#include <iostream>
#include <string>
#include <list>
using namespace std;
int main(){

list <string> nume;//declarare lista de siruri de caractere


nume.push_back("AA");//adaugarea element in lista
nume.push_front("BBB");//adaugare element la inceputul listei
nume.push_front("CCCC");
cout << "Afisare lista: ";//se va parcurge cu iteratori
for (list<string>::iterator it = nume.begin(); it != nume.end(); it++){
cout << *it << ", ";
}
cout << endl;
cout << "Ultimul elemet este: " << (string)nume.back() << endl;//afisare ultimul
element
cout << "Primul elemet este: " << (string)nume.front() << endl;//afisare ultimul
element
cout << "Dimensiunea listei: " << nume.size() << endl;//aflarea dimensiunii
list<string>::iterator it = nume.begin();
it++;
nume.erase(it);
nume.sort();//sortare lista
//afisarea informatiilor stocate in lista
cout << "Afisare lista: ";
for (list<string>::iterator it = nume.begin(); it != nume.end(); it++){
cout << *it << ", ";
}
cout << endl;
}

Exemplu

# include <iostream>
# include <set>
using namespace std;

int main(){
set<int> m;
for (int i = 1; i <= 100; i++)
m.insert(i % 10);
set<int>::const_reverse_iterator it;
for (it = m.rbegin(); it != m.rend(); ++it){
if (*it % 3 == 0)cout << *it << " ";
}
cout << endl;
return 0;
}

3
Programare orientată pe obiecte Curs 7

Exemplu

#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(){//maparile sunt pentru perechi de forma:(nume, valoare)
map <string, int> zile;//declararea
zile["Luni"] = 1; //adaugarea de informatii in map
zile["Marti"] = 2;
zile["Miercuri"] = 3;
zile["Joi"] = 4;
zile["Vineri"] = 5;
zile["Sambata"] = 6;
zile["Duminica"] = 7;
//afisare informatiilor din map
cout << "Zi-Denumire\n";
map <string, int>::const_iterator it;
for (it = zile.begin(); it != zile.end(); it++){
cout << it->second << " " << it->first << "\n";
}
}

Exemplu

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string s1 = "ABCDEFGHIJK", s2 = "123456789";
string s3 = s1 + s2;
s1[3] = tolower(s1[3]);
std::transform(s1.begin(), s1.end(), s1.begin(), tolower);
cout << s1.replace(s1.begin(),s1.begin()+3,"OOO")<< endl;
}

Penbtru mai multe detalii se pot accesa link-urile:


http://www.cplusplus.com/reference/list/list/
http://www.cplusplus.com/reference/vector/vector/
http://www.cplusplus.com/reference/set/set/
http://www.cplusplus.com/reference/map/map
http://www.cplusplus.com/reference/string/string/
http://www.cplusplus.com/reference/iterator/iterator/
http://www.cplusplus.com/reference/algorithm/

Temă: Să se scrie programe pentru testarea elementelor prezentate anterior.

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

  • Pdf-Signed
    Pdf-Signed
    Document1 pagină
    Pdf-Signed
    Munteanu Catalin
    Încă nu există evaluări
  • Parcul National Ceahlau
    Parcul National Ceahlau
    Document2 pagini
    Parcul National Ceahlau
    Munteanu Catalin
    Încă nu există evaluări
  • Proiect
    Proiect
    Document25 pagini
    Proiect
    Munteanu Catalin
    Încă nu există evaluări
  • Cheltuieli Publice
    Cheltuieli Publice
    Document8 pagini
    Cheltuieli Publice
    Septimiu Nicolae
    Încă nu există evaluări
  • Proiect
    Proiect
    Document25 pagini
    Proiect
    Munteanu Catalin
    Încă nu există evaluări
  • Proiect
    Proiect
    Document25 pagini
    Proiect
    Munteanu Catalin
    Încă nu există evaluări
  • Atestat Catalin
    Atestat Catalin
    Document26 pagini
    Atestat Catalin
    Munteanu Catalin
    Încă nu există evaluări
  • Capitolul Ii
    Capitolul Ii
    Document12 pagini
    Capitolul Ii
    Ilaș Alexandra Mihaela
    Încă nu există evaluări
  • Capitolul Ii
    Capitolul Ii
    Document12 pagini
    Capitolul Ii
    Ilaș Alexandra Mihaela
    Încă nu există evaluări
  • Capitolul I
    Capitolul I
    Document23 pagini
    Capitolul I
    Daniel Stanculescu
    Încă nu există evaluări