Documente Academic
Documente Profesional
Documente Cultură
CURS 11 - PROGRAMARE II
CUPRS ANTERIOR
Tipuri de date abstracte Tipuri de date generice Funcii ablon Clase ablon
CUPRINS
Introducere n Stanard Template Library Containere secveniale Containere asociative Adaptori ai containerelor Algoritmi Bitset
Eficiena
Performane mai bune dect implementrile non-generice (codificrii personale)
DE CE S FOLOSIM STL?
Micoreaz timpul de implementare Structuri de date deja implementate si testate Cod mai uor de citit Robusteea Structurile STL sunt actualizate automat Cod portabil Mentenabilitatea codului Uurin
CONTAINERE
Definiie Un container este un obiect care conine obiecte Exemple: list, vector, stack, etc Avantaje containere Simple i eficiente Fiecare container are ataat o mulime de operaii comune iterarori standard sunt disponibili pentru fiecare container Type-save i homogeni Sunt non-intrusive (ex. un obiect nu are nevoie de o clas de baz pentru a fi membru a unui container )
EXEMPLU PROGRAM
#include <map> #include <string> map<string,float> price; price[snapple] = 0.75; price[coke] = 0.50; string item; double total=0; while ( cin >> item ) total += price[item];
EXEMPLU PROGRAM
#include <map> #include <string> map<string,float> price; price[snapple] = 0.75; price[coke] = 0.50; string item; double total=0; while ( cin >> item ) total += price[item];
EXEMPLU PROGRAM
#include <map> #include <string> map<string,float> price; price[snapple] = 0.75; price[coke] = 0.50; string item; double total=0; while ( cin >> item ) total += price[item];
CONTAINERE
Tipuri de containere Containere secveniale
Structuri de date liniare (vector, link list) Containere first-class
Containere asociative
Non+liniari, pot identifica rapid elemente Perechi cheie/valoare Containere first-class
12
CONTAINERE
Containere secveniale vector deque list Containere asociative set multiset map multimap
13
14
ITERATORI
Iteratori asemntori cu ponteri Pointeaz spre primul element al unui container Operatori comuni pentru toate containerele
* defereniere ++ pointez spre urmtorul element begin() ntoarce un iterator sper primul element end() ntoarce un iterator sper primul element
it
15
ITERATORI
Utilizare std::istream_iterator< int > inputInt( cin )
Poate citi intrri de la cin *inputInt Defereniat pentru a citi primul int de la cin ++inputInt Trece la urmtorul int din flux (stream)
16
ITERATORI. EXEMPLU
#include <iostream> #include <iterator> // ostream_iterator i isteam_iterartor using namespace std; int main() { cout << "Introdu 2 intregi: "; istream_iterator <int> inputInt (cin);
17
TIPURI DE ITERATORI
Intrare (input) Citete elemente dintr-un container, se poate deplasa doar nainte Ieire (output) Scrie elemente ntr-un container, se poate deplasa doar nainte naintare (forward) Combin iteratori de intrare i ieire Pot parcurge o secven de ai multe ori Bidirecionali
La fel ca cei de naintare, dar se pot deplasa i n sens invers Acces aleatoriu (random)
La fel ca cei bidirecionali dar pot sri i la orice element
18
19
ITERATORI OPERAII
Toi
++p, p++
Iteratori de naintare
Conin operalile iteratori de intrare i ieire
Iteratori de intrare
*p p = p1 p == p1, p != p1
Bidirecionali
--p, p
Acces aleatoriu
p + i, p += i p - i, p -= i p[i] p < p1, p <= p1 p > p1, p >= p1
Iteratori de ieire
*p p = p1
20
ALGORITMI
Algoritmi STL utilizai de obicei mpreun cu containerele Opereaz cu elementele indirect prin intermediul iteratorilor De multe ori opereaz pe secvene de operatori
Perechi de operatori Primul i ultimul element
21
MODELUL
Algoritmi
Separarea conceptelor Algoritmi manipuleaz datele, dar nu tiu despre containere Iteratori Containerele depoziteaz datele, dar nu tiu despre algoritmi Algoritmi i containerele Containere interacioneaz prin vector, list, map, hash_map, intermediul iteratorilor Fiecare container are un iterator
sort, find, search, copy,
22
CONTAINERE SECVENIALE
vector
0 1 2 3
list
(dublu nlanuit)
0 1 2
set
(un fel de arbore)
0 2 1
6
7 5 3 4
CONTAINERUL LIST
Containerul list Header <list> Adugare/tergere eficient oriunde n container Liste dublu nlnuite Iteratori bidirecionali Utilizare
Std::list < tip > nume;
24
CONTAINERUL LIST
Funcii ataate unui obiect, T, de tip list T.sort ()
Sortare n ordine cresctoare
T.merge (altObiect)
terge altObiect i l insereaz n T sortat
T.unique()
terge elementele duplicate
25
CONTAINERUL LIST
Funcii ataate unui obiect, T, de tip list T.swap (altObiect)
Interschimb coninutul
T.remove (valoare)
terge toate instanele valorii valoare
26
VECTOR
Header <vector> Tablou dinamic Inserare/ tergere rapid de la sfritul tabloului reverse(), capacity()
Aloc o zon de memorie continu mai mare Face o copie a lui nsui Dealoc vechea memorie Iteratori de acces aleatori
27
VECTOR
Declarare std::vector < tip > variabila; Iteratori std::vector <tip>::const_iterator iterVar;
Nu poate modifica valorile elementelor
28
VECTOR
Funcii V.push_back(valoare)
Adaug un element la sfritul vectorului
V.size()
Dimensiune actual a vectorului
V.capacity()
Ct de multe elemente poate s conin vectorul nainte de a fi redimensionat La realocare spaiul se dubleaz
29
VECTOR
Funcii V.insert (iterator, valoare)
Insereaz valoarea naintea locaiei iteratorului
V.erase( iterator)
terge elementul din container
V.clear()
terge ntreg containerul
30
VECTOR
Funcii V.front(), V.back()
Returnez primul, ultimul element al vectorului
V[elementnumber] = valoare
Atribuie valoarea elementului
31
PARCURGERE VECTOR
for(int i = 0; i<v.size(); ++i)
// utilizare v[i]
// de ce int? // mai
32
DEQUE
Coad cu intrri n ambele pri Inserare rapid la nceputul i sfritul cozi
33
SET
Mulime list de elemente sorate Regsire rapid pe baza chei (log N) Adugare / tergere rapid Stocare sub form de arbore balansat
set
34
MAP
List sortat de perechi (cheie, valoare) Implementare asemntoare cu set
map
35