containere stl
TRANSCRIPT
![Page 1: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/1.jpg)
CONTAINERE STL
Mihail Croitor
![Page 2: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/2.jpg)
Cuprins
Iteratori
Proprietățile iteratorilor
Containere
Proprietăți comune ale containerelor
Containere consecutive
Containere asociative
Utilizarea containerelor
Recomandări
![Page 3: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/3.jpg)
Legenda
Х – o clasă container;
u, a, b - obiecte clasei X;
r - iterator;
T – tipul elementelor containerului;
t – valoare de tip T;
n – număr întreg.
![Page 4: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/4.jpg)
Iteratori
Iterator este un obiect special ce asigură acces la elemente din container și permite parcurgerea lor
TIPURI ale ITERATORILOR
Iterator de ieșireIterator de intrare
Iterator consecutiv
Iterator de acces liber
Iterator bidirecțional
![Page 5: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/5.jpg)
Iteratori
Iterator de intrare (input iterator) – permite luarea valorii elementelor din container;
Iterator de ieșire (output iterator) – permite modificarea valorilor elementelor din container;
Iterator consecutiv (forward iterator) – permiteparcurgerea consecutivă a elementelor;
Iterator bidirecțional (bidirectional iterator) – permite parcurgerea consecutivă a elementelor din container cât în ordinea directă atât și în ordinea inversă;
Iterator de acces liber (random access iterator) –permite acces liber la orice element din container;
![Page 6: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/6.jpg)
Proprietățile iteratorilor:iterator de intrare
Proprietate Explicație
X(a)X u(a);X u = a;
Constructor de copiere. Se presupune existența destructorului.
a = b; Operator de copiere
a==b;a != b;
Operator de comparare
*a; Operator de dereferențiere. Se returnează referința constantă la element din container.
++r;r++;
Parcurgerea directă a iteratorilor
NB: iteratori de intrare nu garantează că dacă a == b, atunci a++ == b++
![Page 7: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/7.jpg)
Proprietățile interatorilor:iterator de ieșire
Proprietate Explicație
X(a)X u(a);X u = a;
Constructor de copiere. Se presupune existența destructorului.
*a = t; Operator de dereferențiere. Se returnează referința la element din container.
++r;r++;
Parcurgerea directă a iteratorilor
![Page 8: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/8.jpg)
Proprietățile iteratorilor:iteratori consecutivi
Proprietate Explicație
Are toate proprietăți ale iteratorilor de intrare și de ieșire
a==b;a != b;
Operatori de comparare.a == b => ++a == ++b
![Page 9: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/9.jpg)
Proprietățile iteratorilor:iteratori bidirecționale
Свойство Explicație
Are toate proprietăți ale iteratorilor consecutivi
--r;r--;
Parcurgerea inversă a iteratorilor
![Page 10: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/10.jpg)
Proprietățile iteratorilor:iteratori de acces liber
Proprietate Explicație
Are toate proprietăți ale iteratorilor bidirecționale
r += n;r –= n;
Deplasarea cu n elemente a iteratorului r
r + n;n + r;r – n;
Deplasarea cu n elemente de la iterator a
b – a; Distanța dintre iteratori
a[n] Parcurgerea consecutivă a iteratorilor
a > b;a < b;a ≥ b;a ≤ b;
Operatori de ordonare.
![Page 11: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/11.jpg)
Containere
Container este un obiect ce conține alte obiecte, de obicei de unul și același tip.
Acces la elemente din container se face prin iteratori.
Containeri С++ sunt realizate ca clase șabloane cu interfață de bază comună.
![Page 12: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/12.jpg)
Containere
Lista (list)
Coada (deque)
Vector (vector)
Mulțime (set)
Vector asociativ (map)
Mulțime cu repetări(multiset)
Vector asociativ cu repetări (multimap)
Consecutive (de secvența) Asociative
![Page 13: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/13.jpg)
Containere: Structura comună
proprietate comentariu
X::value_type Este egal cu tip T
X::reference Este egal cu tip T&
X::iterator Tipul iterator, care indică la X::reference
X::const_iterator Iterator constant
X() Constructor implicit
X(a) Constructor de copiere
a.begin() Returnează Iterator; const_iterator ce arată la primul element
a.end() Returnează Iterator; const_iterator ce arată după ultimul element
a.size() Returnează dimensiunea containerului
a.empty() Verifică dacă container este gol
… …
![Page 14: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/14.jpg)
Containere consecutive:proprietăți comune
expresie comentariu
X(n, t)
X a(n, t);
După executare size() == n.
Crează container cu n copii t.
X(i, j)
X a(i, j);
După executare size() == distanța dintre i și j.
crează container cu copii de elemente din segment [i, j).
a.insert(p, t) Inserează copie t înainte de iterator p.
se returnează iterator ce arată la obiect inserat.
a.insert(p, n, t) Inserează n copii t înainte de iterator p.
a.insert(p, i, j) Inserează copii elementelor din segment [i, j) înainte de iterator p.
a.erase(q) Șterge element la care arată iteratorul q.
a.erase(ql, q2) Șterge elemente din diapazonul [ql, q2).
![Page 15: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/15.jpg)
Containere consecutive:proprietăți adăugătoare
expresie semantica container
a.front() *a.begin() vector, list, deque
a.back() *(--a. end()) vector, list, deque
a.push_front(t) a.insert(a.begin(), t) list, deque
a.push_back(t) a.insert(a.end(), t) vector, list, deque
a.pop_front() a.erase(a.begin()) list, deque
a.pop_back() a.erase(-- a.end()) vector, list, deque
a[n] *(a.begin() + n) vector, deque
![Page 16: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/16.jpg)
Containere asociative:proprietăți comune
proprietate Comentariu
X::key_type Tipul cheii
X::value_type Tipul valorii
X::key_compare Tipul funcției de comparare a cheilor (functor)
X(i, j), X(i, j, c) Crearea containerului cu valori din segment [i, j). c – obiectul de comparare
a.insert(t)a.insert(i, j)a.insert(p, t)
Inserarea elementului (segmentului)
a.erase(k);a.erase(q);
Eliminarea elementului după cheie sau iterator.
a.find(k) Căutarea valorii după cheie.
a.count(k) Подсчет элементов с ключом, равным к
… …
![Page 17: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/17.jpg)
Utilizarea containerilor
![Page 18: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/18.jpg)
Recomandări:alegerea tipului de container
Criteriu Recomandări
Posibilitatea inserării elementului nou în orice poziție a containerului
Alegeți containere consecutive (containere asociative nu sunt potrivite, deoarece aranjează elemente într-o ordine proprie).
Structura memoriei containerului trebuie să corespundă regulilor limbajului C
Numai vector
Viteza căutării este critică Considerați vectori ordonați sau containere asociative
![Page 19: containere stl](https://reader034.vdocuments.mx/reader034/viewer/2022050818/55a92fe81a28ab3f578b489d/html5/thumbnails/19.jpg)
Recomandări:utilizarea STL
Nu încercați să scrieți codul independent de tipul containerului;
Realizați operația de copiere rapidă și corectă în clasa elementelor containerului;
Nu utilizați iteratorii repetat;
Utilizați algoritmii în loc de cicluri;
Nu uitați să includeți fișiere-antet necesare;
Învățați-vă să citiți mesajele compilatorului