STL Partea 1 1 Cuprins l l STL
- Slides: 48
STL Partea 1 1
Cuprins l l STL (Standard Template Library) ce include siruri containere standard • sumar • vectori • liste • tablouri asociative cu chei multiple D. Lucanu STL – Partea 1 2
STL: : continut l l l biblioteci C • <cstring> • <cstdlib> • etc siruri ca obiecte • <string> containere • <vector> • <list> • <queue> • <stack> • <map> • etc D. Lucanu STL – Partea 1 3
STL: : continut (cont. ) l iteratori • <iterator> l algoritmi • <algorithm> • <cstdlib> l intrari/iesiri • <iostream> • <istream> • etc l etc D. Lucanu STL – Partea 1 4
STL: : siruri: : exemplu simplu header #include <string> l spatiul de nume using namespace std; l declaratii siruri string s("Un text simplu. "); string tag("$tag$"); l s tag Un text simplu. 15 $tag$ 5 D. Lucanu STL – Partea 1 5
STL: : siruri: : exemplu simplu operatii peste siruri s. insert(8, tag + ' '); int start = s. find(tag); s. replace(start, tag. size(), "foarte"); cout << s. c_str(); l Un text foarte simplu. s tag D. Lucanu Un text simplu. 15 22 21 Un text $tag$ simplu. $tag$ 5 STL – Partea 1 6
STL: : containere: : definitie l l un obiect care contine alte obiecte (componentele) si are metode de accesare a componentelor fiecare container are asociat un tip iterator cu ajutorul caruia se "merge" prin container D. Lucanu STL – Partea 1 7
STL: : secvente <vector> suporta acces aleator la elemente, timp constant pentru insertie si eliminarea componentelor de la sfarsit, timp liniar pentru inserarea si eliminarea elementelor de la inceput si interior <list> suporta parcurgerea in ambele sensuri, timp constant (amortizat) pentru insertie si eliminare la inceput, la sfarsit sau in interior <deque> suporta acces (inserare si eliminare) la ambele capete <queue> suporta inserare la un capat si eliminare la celalalt capat <stack> suporta inserarea si eliminarea la acelasi capat etc D. Lucanu STL – Partea 1 8
STL: : containere asociative suporta cautarea eficienta bazata pe chei <map> componentele sunt perechi <cheie, data> cu cheie unica (nu exista doua date cu aceeasi cheie) <multimap> componentele sunt perechi <cheie, data> cu cheie multipla (pot exista mai multe date cu aceeasi cheie) <set> componentele sunt doar de tip cheie si NU pot exista in duplicat <multiset> componentele sunt doar de tip cheie si POT exista in duplicat etc l D. Lucanu STL – Partea 1 9
STL: : containere: : tipuri asociate X: : value_type tipul obiectului memorat in container X: : allocator_type tipul managerului de memorie X: : size_type tip pentru indici, numar de elemente etc X: : iterator tip pentru iterator cu care se "merge" prin container etc D. Lucanu STL – Partea 1 10
STL: : containere: : iteratori l l l definitie: sint utilizati pentru a naviga prin containeri, fara sa stim ce tip de data este utilizat pentru memorarea obiectelor concepte cheie: • elementul curent la care face referire (p->, *p) • elementul urmator/precedent (++p, --p) • comparatii (< <= ==) alti iteratori begin() end() rbegin() // reverse begin rend() // reverse end D. Lucanu STL – Partea 1 11
STL: : containere: : iteratori l O clasificare a iteratorilor • iteratori cu acces aleator == != < > >= <= ++ -- + - += -= *p= -> [] =*p • iteratori bidirectionali == != ++ -- *p= • iteratori “forward” • • -> =*p == != ++ *p= -> =*p iteratori de intrare: == != ++ -> =*p iteratori de iesire: ++ *p= D. Lucanu STL – Partea 1 12
STL: : iteratori constanti si mutabili l iterator constant: obiectul referit poate fi accesat dar nu se poate atribui o noua valoare prin acest iterator typedef vector<int>: : const_iterator Vect. Int. Const. It; l Iterator “mutable”: sunt posibile ambele actiuni (acces si atribuire valoare) typedef vector<int>: : iterator Vect. Int. It; l exemplu Vect. Int. Const. It q; vect. Int. erase(q); // error: no matching function. . . Vect. Int. It p; vect. Int. erase(p); // OK D. Lucanu STL – Partea 1 13
STL: : containere: : acces la elemente c. front() primul element c. back() ultimul element c[i] //(nu pentru liste) al i-lea element din secventa (NU se valideaza valoarea lui i) c. at(i) //(nu pentru liste) al i-lea element din secventa (SE valideaza valoarea lui i) D. Lucanu STL – Partea 1 14
STL: : operatii de tip stiva si coada c. push_back(x) insereaza x la sfarsit c. pop_back() elimina de la sfarsit c. push_front(x) insereaza x la inceput c. pop_front() elimina de la inceput D. Lucanu STL – Partea 1 15
STL: : containere: : operatii de tip lista c. insert(p, x) insereaza x inaintea lui p c. insert(p, n, x) insereaza n copii ale lui x inaintea lui p c. insert(p, first, last) adauga elementele din [first, last) inaintea lui p c. erase(p) elimina de la p c. erase(first, last) elimina elementele din [first, last) c. clear() elimina toate elementele D. Lucanu STL – Partea 1 16
STL: : containere: : alte operatii // numarul de elemente // este c vid? // (numai pentru vector) spatiul alocat // (numai pentru vector) aloca spatiu // (numai pentru vector) adauga elemente la // sfarsit max_size() // (numai pentru vector) dim celui mare // vector posibil swap(c 1, c 2) // intershimba continuturile a 2 containere == // testul de egalitate != // testul diferit < // relatia de ordine lexicografica c. size() c. empty() c. capacity() c. reserve(n) c. resize() D. Lucanu STL – Partea 1 17
STL: : containere: : constructori container() containerul vid container(n) containerul cu n elemente cu valoare implicita container(n, x) (nu pt asociative) containerul cu n copii ale lui x container(first, last) containerul cu elemente din intervalul [first, last) container(c) constructorul de copiere ~container() destructor D. Lucanu STL – Partea 1 18
STL: : containere: : atribuiri operator=(c) copie din containerul c assign(n) //(nu pentru asociative) atribuie n elemente cu valoare implicita assign(n, x) //(nu pentru asociative) atribuie n copii ale lui x assign(first, last) atribuie din intervalul [first, last) D. Lucanu STL – Partea 1 19
STL: : containere: : operatii asociative operator[](k) acceseaza elementul cu cheia k find(k) gaseste componenta cu cheia k lower_bound(k) gaseste primul element cu cheia k upper_bound(k) gaseste primul element cu cheia mai mare decat k equal_range(k) gaseste lower_bound() si upper_bound() pentru cheia k key_comp() componenta cheie value_comp() componenta valoare (data) D. Lucanu STL – Partea 1 20
STL: : vector: : declarare template <class T, class A = allocator<T>> class std: : vector { public: typedef T data_type; //. . . iterator begin(); //. . . } D. Lucanu STL – Partea 1 21
STL: : vector: : reprezentare size rep elemente D. Lucanu STL – Partea 1 spatiu extra 22
vector: : exemplu: : agenda telefonica vector <T> Intrare > te tia an st re> ra in << > << im po nt rt> > <I Ag. Te l D. Lucanu STL – Partea 1 23
vector: : exemplu: : agenda telefonica header #include <vector> l intrare in agenda = structura class Intrare { public: Intrare(char *un_s="