MySQL Java JavaScript PHP Python HTML-CSS C-sharp C++ Go

Containere

Tipuri de containere

Pentru gestionarea colecțiilor de obiecte, în biblioteca standard C++ sunt definite containere. Un container reprezintă o colecție de obiecte de un anumit tip și permite gestionarea accesului la aceste elemente. În C++ există două tipuri de containere: asociative și secvențiale.

Un container secvențial (sequential container) stochează elementele într-o ordine secvențială, elementele fiind plasate unele lângă altele. Totuși, ordinea poate varia în funcție de containerul specific.

Tipuri de containere secvențiale:

  • array: colecție cu dimensiune fixă

Suportă acces aleatoriu la orice element din container. Nu permite adăugarea sau eliminarea de elemente.

  • vector: colecție cu dimensiune variabilă

Suportă acces aleatoriu la orice element. Permite adăugarea și eliminarea de elemente oriunde în container.

  • deque: coadă dublu-capăt

Suportă acces aleatoriu la orice element. Permite adăugarea și eliminarea de elemente atât la început cât și la sfârșit.

  • list: listă dublu înlănțuită

Suportă doar acces secvențial bidirecțional. Permite adăugarea și eliminarea de elemente la început și sfârșit.

  • forward_list: listă simplu înlănțuită

Suportă doar acces secvențial unidirecțional. Permite adăugarea și eliminarea de elemente la început și sfârșit.

Astfel, biblioteca standard C++ conține un set de containere care reprezintă structuri de date specifice. Toate acestea au atât funcționalități comune, cât și unele particulare. Cu excepția clasei array, toate permit adăugarea și eliminarea de elemente. Diferențele principale între ele sunt modul în care gestionează inserarea, ștergerea și accesul la elemente.

În funcție de situație și necesități, se poate alege tipul de container potrivit. De exemplu, dacă este nevoie de acces aleatoriu la elemente, se utilizează array sau vector (cu list sau forward_list ar trebui parcursă lista pentru a găsi un element). Dacă este nevoie de inserare/ștergere la mijlocul containerului, list sau forward_list sunt mai potrivite, deoarece cu vector este mai complicat. Cu toate acestea, vector este cel mai des utilizat, fiind un tip de date flexibil. Celelalte sunt folosite mai rar.

Adaptori de containere

Pe lângă containerele secvențiale, există și așa-numiții adaptori de containere (container adapters). Din punct de vedere tehnic, aceștia nu sunt containere în sine, ci încorporează unul dintre containerele menționate mai sus (precum un vector) și oferă o interfață diferită pentru lucru cu acel container. Aceste tipuri sunt:

  • std::stack<>: reprezintă o structură de date tip „stivă” (stack)
  • std::queue<>: reprezintă o structură de tip „coadă” (queue)
  • std::priority_queue<>: coadă în care elementele au priorități

Containere asociative

Containerele asociative (associative containers) sunt containere în care fiecărui element îi este asociată o cheie, iar această cheie este folosită pentru a accesa elementul în container.

În C++, containerele asociative sunt reprezentate de seturi (set) și hărți / dicționare (map).