Sunteți pe pagina 1din 4

Curs 10.

Biblioteca standard C++ (STL C++) (cont.)

Adaptoare pentru containere: stive, cozi, cozi cu priorități


Coada cu 2 capete (container secvential)

Stive

https://www.cplusplus.com/reference/stack/stack/
https://en.cppreference.com/w/cpp/container/stack

Template:

template<

class T,
class Container = std::deque<T>
> class stack;

bazat pe deque ( double-ended queue) - container cu dimensiune variabila care poate


fi expandat sau contractat pe la ambele capete - similar cu clasa vector

acces la elemente - LIFO (Last In First Out)

Membri clasei:

top - intoarce elementul din virful stivei (fara sa il scoata)

empty - test stiva vida

size - intoarce dimensiunea stivei

push - adauga in stiva un element deja existent (creat)


(are ca parametru elementul care se introduce in stiva)

pop - extrage din stiva

emplace - creaza si adauga in stiva un element


(are parametri necesari pentru a construi elementul din stiva)

swap

interschimba tot continutul intre doua containere (stive)


(are ca parametru containerul cu care se face interschimbarea)

(detalieri - stack_template.pdf)

Cozi

https://www.cplusplus.com/reference/queue/queue/
https://en.cppreference.com/w/cpp/container/queue

Template

template<
class T,
class Container = std::deque<T>
> class queue;

bazat pe deque

access la elemente - First In First Out (FIFO)


un capat de intrare
un capat de iesire

Membri

front - primul element


back - ultimul element

empty - coada vida


size - dimensiunea cozii
push - insereaza element (la sfirsit) - element deja creat
pop - extrage element ( la inceput)

emplace - insereaza element (pe care il si construieste)

swap - interschimba continutul a de containere (cozi)

(detalieri queue_template.pdf)

Cozi cu prioritati

https://www.cplusplus.com/reference/queue/priority_queue/
https://en.cppreference.com/w/cpp/container/priority_queue

template<

class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;

se poate modifica ordinea in coada (nu mai e FIFO)


-> implicit primul element este cel mai mare

priority_queue<int> q1; // ordine descrescatoare

(se poate modifica regula)


- Elementele nu sint sortate in coada !!
- Doar primul element este cel mai mare - restul isi pot modifica pozitia
(implementare ca arbore heap, vezi SDA)

vector <int> data = { 5, 10, 6, 9, 3, 1};


priority_queue<int, vector<int>, greater<int>> q2(data.begin(), data.end());

vector <int> data = { 5, 10, 6, 9, 3, 1};


priority_queue<int, vector<int>, less<int>> q2(data.begin(), data.end()); //
template specializat

(primul element e cel mai mic)

Aplicatie - sortarea heap (SDA)


Membri

top() - citeste eelementul din coada


empty() - determina daca coada este vida
size() - determina dimensiunea cozii
push(..) - introduce un element in coada
pop() - eleimina un element din coada
emplace(..) - introduce un element (si il construieste in prealabil) in coada
swap(..) - inverseaza continutul a 2 cozi

(detalieri queue_prio_template.pdf)

Coada cu 2 capete

https://www.cplusplus.com/reference/deque/deque/
https://en.cppreference.com/w/cpp/container/deque

container secvential - accesul pe la doua capete (inserare sau extragere)


expandare sau contractie a zonei de memorie necesara

Template

template<

class T,
class Allocator = std::allocator<T>
> class deque;

nu se stocheaza in zone de memorie continuue (la rind), ca va vector


expandare mai rapida decit la vector (zona nu mai e continua, nu sint necesare
copieri de elemente)
complexitatea operatiilor ca la vector

Membri:

at - accesarea unui element specificat sau ([])


front - accesare primul element
back - accesare ultimul element
iteratori: begin, end

empty() - deque vida


size() - dimensiunea

shink_to_fit() - reducerea memoriei necesare la minim necesar

clear() - sterge continutul


insert(..) - insereaza element intr-o pozitie data (cu iteratori)
emplace(..) - construieste si insereaza element (cu iteratori)
erase(..) - sterge element (cu iteratori)

push_back(..) - insereaza element la sfirsitul cozii


push_front(..) - insereaza element la inceputul cozii

pop_back() - elimina elementul de la sfirsitul cozii


pop_front() - elimina elementul de la inceputul cozii
rezize(..) - modifica dimensiunea (se pot elimina elemente sau adauga altele)
swap(..) - interschimba continutul intre 2 deque

(detalieri deque_template.pdf)

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