Differences

This shows you the differences between two versions of the page.

Link to this comparison view

poo-is-ab:laboratoare:11 [2024/12/08 18:31]
razvan.cristea0106 [Clasele map și set]
poo-is-ab:laboratoare:11 [2025/12/04 10:40] (current)
razvan.cristea0106 [Algoritmi]
Line 7: Line 7:
 Studentul va fi capabil la finalul acestui laborator să: Studentul va fi capabil la finalul acestui laborator să:
  
-  * înțeleagă importanța conceptului de programare modernă în C++ și avantajele oferite de utilizarea bibliotecii STL.  ​ +  * înțeleagă importanța conceptului de programare modernă în C++ și avantajele oferite de utilizarea bibliotecii STL 
-  * recunoască și să explice clasele și componentele principale din biblioteca STL.  ​ +  * recunoască și să explice clasele și componentele principale din biblioteca STL 
-  * utilizeze eficient diverse structuri de date și algoritmi disponibili în STL pentru rezolvarea unor probleme concrete.  ​ +  * utilizeze eficient diverse structuri de date și algoritmi disponibili în STL pentru rezolvarea unor probleme concrete 
-  * aplice principiile și cunoștințele dobândite anterior în programare pentru a dezvolta soluții robuste și eficiente folosind STL.  ​ +  * aplice principiile și cunoștințele dobândite anterior în programare pentru a dezvolta soluții robuste și eficiente folosind STL 
-  * identifice și să utilizeze algoritmi standard din STL pentru a optimiza procesele și pentru a simplifica implementarea unor operații complexe. +  * identifice și să utilizeze algoritmi standard din STL pentru a optimiza procesele și pentru a simplifica implementarea unor operații complexe 
-  +
 ==== Introducere ==== ==== Introducere ====
  
Line 27: Line 27:
 Această introducere a **STL-ului** a reprezentat un moment revoluționar în istoria limbajului, oferind programatorilor un set bogat de structuri de date generice (precum **vectori**,​ **liste**, **seturi**, și **map-uri**),​ algoritmi și funcționalități asociative, toate bazate pe concepte precum **template-uri** și **iteratori**. Această introducere a **STL-ului** a reprezentat un moment revoluționar în istoria limbajului, oferind programatorilor un set bogat de structuri de date generice (precum **vectori**,​ **liste**, **seturi**, și **map-uri**),​ algoritmi și funcționalități asociative, toate bazate pe concepte precum **template-uri** și **iteratori**.
  
-De atunci, **STL-ul** a evoluat și a fost extins în versiunile ulterioare ale standardului **C++ (C++11, C++14, C++17, C++20, ​etc.)**, fiind integrată cu noile caracteristici ale limbajului.+De atunci, **STL-ul** a evoluat și a fost extins în versiunile ulterioare ale standardului **C++ (C++11, C++14, C++17, C++20, ​C++23)**, fiind integrată cu noile caracteristici ale limbajului.
  
 ==== De ce să folosim STL? ==== ==== De ce să folosim STL? ====
Line 43: Line 43:
 ==== ==== ==== ====
  
-Pe scurt, **STL-ul** ne ajută să scriem un cod robust, eficient și ușor de înțeles, economisind timp prețios în procesul de dezvoltare. Totuși ​trebie ​menționat că o bună cunoaștere a conceptului de **structuri de date și algoritmi** va simplifca masiv înțelegerea modului în care componentele acestei biblioteci funcționează.+Pe scurt, **STL-ul** ne ajută să scriem un cod **robust****eficient** și **ușor de înțeles**, economisind timp prețios în procesul de dezvoltare. Totuși ​trebuie ​menționat ​faptul ​că o bună cunoaștere a conceptului de **structuri de date și algoritmi** va simplifca masiv înțelegerea modului în care componentele acestei biblioteci funcționează.
  
 ==== Alcătuirea bibliotecii standard din C++ ==== ==== Alcătuirea bibliotecii standard din C++ ====
Line 78: Line 78:
 | **at()** | Returnează caracterul de la o poziție specifică (cu verificare de limite). | | **at()** | Returnează caracterul de la o poziție specifică (cu verificare de limite). |
 | **operator=** | Atribuie un string altui string. | | **operator=** | Atribuie un string altui string. |
-| **operator[]** | Returnează caracterul de la o poziție specifică (fără verificare de limite). |+| **operator[ ]** | Returnează caracterul de la o poziție specifică (fără verificare de limite). |
 | **operator+** | Concatenează două stringuri sau un string și un șir de caractere. | | **operator+** | Concatenează două stringuri sau un string și un șir de caractere. |
 | **operator+=** | Adaugă un string sau un șir de caractere la stringul curent. | | **operator+=** | Adaugă un string sau un șir de caractere la stringul curent. |
Line 164: Line 164:
 </​code>​ </​code>​
  
 +<note tip>​Pentru toate metodele și operatorii puși la dispoziție de clasa **string** recomandăm citirea documentației oficiale care se poate găsi chiar [[https://​en.cppreference.com/​w/​cpp/​string/​basic_string|aici]].</​note>​
 ==== Standard Template Library ==== ==== Standard Template Library ====
  
Line 200: Line 201:
   * **std::​list**:​ Un container bazat pe o **listă dublu înlănțuită**,​ care permite **adăugarea** și **ștergerea rapidă** a elementelor la **orice poziție** din listă (**O(1)** pentru inserare/​ștergere,​ **O(n)** pentru accesul la elemente).   * **std::​list**:​ Un container bazat pe o **listă dublu înlănțuită**,​ care permite **adăugarea** și **ștergerea rapidă** a elementelor la **orice poziție** din listă (**O(1)** pentru inserare/​ștergere,​ **O(n)** pentru accesul la elemente).
  
-  * **C++11: ​std::​array**:​ Un container care stochează un **număr fix** de elemente într-un **bloc contigu** de memorie, fiind similar cu un **tablou static**, dar cu funcționalități suplimentare specifice **STL-ului**.+  * **std::​array**:​ Un container care stochează un **număr fix** de elemente într-un **bloc contigu** de memorie, fiind similar cu un **tablou static**, dar cu funcționalități suplimentare specifice **STL-ului**.
  
-  * **C++11: ​std::​forward_list**:​ O **listă simplu înlănțuită** care economisește memorie față de **std::​list**,​ fiind mai **eficientă** pentru **inserări** și **ștergeri** la începutul listei, dar **fără acces direct** la elemente intermediare.+  * **std::​forward_list**:​ O **listă simplu înlănțuită** care economisește memorie față de **std::​list**,​ fiind mai **eficientă** pentru **inserări** și **ștergeri** la începutul listei, dar **fără acces direct** la elemente intermediare.
  
 === Adaptoare de Containere (Container Adaptors) === === Adaptoare de Containere (Container Adaptors) ===
Line 256: Line 257:
 | **pop_back()** | Elimină ultimul element din vector. | | **pop_back()** | Elimină ultimul element din vector. |
 | **at()** | Returnează elementul de la o anumită poziție, cu verificare de limite. | | **at()** | Returnează elementul de la o anumită poziție, cu verificare de limite. |
-| **operator[]** | Returnează elementul de la o anumită poziție, fără verificare de limite. |+| **operator[ ]** | Returnează elementul de la o anumită poziție, fără verificare de limite. |
 | **size()** | Returnează numărul curent de elemente din vector. | | **size()** | Returnează numărul curent de elemente din vector. |
 | **capacity()** | Returnează capacitatea totală a vectorului, adică numărul maxim de elemente pe care le poate stoca fără a realoca memorie. | | **capacity()** | Returnează capacitatea totală a vectorului, adică numărul maxim de elemente pe care le poate stoca fără a realoca memorie. |
Line 330: Line 331:
 Pentru clasa **list** propunem următorul tabel ca și referință. Pentru clasa **list** propunem următorul tabel ca și referință.
  
-^     ​Denumire metodă/​Operator ​    ^     ​Descriere ​    ^+^     ​Denumire metodă ​    ​^ ​    ​Descriere ​    ^
 | **push_back()** | Adaugă un element la sfârșitul listei. | | **push_back()** | Adaugă un element la sfârșitul listei. |
 | **push_front()** | Adaugă un element la începutul listei. | | **push_front()** | Adaugă un element la începutul listei. |
Line 482: Line 483:
 <note warning>​Clasele **stack**, **queue** și respectiv **priority_queue** nu au iteratori puși la dispoziție deoarce singurele operații permise asupra acestor structuri de date sunt cele de **push** și **pop**.</​note>​ <note warning>​Clasele **stack**, **queue** și respectiv **priority_queue** nu au iteratori puși la dispoziție deoarce singurele operații permise asupra acestor structuri de date sunt cele de **push** și **pop**.</​note>​
  
-<note tip>​Pentru mai multe detalii despre clasele **stack**, **queue** și **priority_queue** recomandăm următoarele ​documentații:​+<note tip>​Pentru mai multe detalii despre clasele **stack**, **queue** și **priority_queue** recomandăm ​citirea ​următoarelor ​documentații ​oficiale:
   * pentru stivă puteți citi de [[https://​en.cppreference.com/​w/​cpp/​container/​stack|aici]];​   * pentru stivă puteți citi de [[https://​en.cppreference.com/​w/​cpp/​container/​stack|aici]];​
  
Line 495: Line 496:
  
 ^     ​Denumire metodă/​Operator ​    ​^ ​    ​Descriere ​    ^ ^     ​Denumire metodă/​Operator ​    ​^ ​    ​Descriere ​    ^
-| **operator[]** | Accesează sau inserează un element cu cheia specificată. |+| **operator[ ]** | Accesează sau inserează un element cu cheia specificată. |
 | **at()** | Returnează o referință la valoarea asociată unei chei, aruncând o excepție dacă cheia nu există. | | **at()** | Returnează o referință la valoarea asociată unei chei, aruncând o excepție dacă cheia nu există. |
 | **insert()** | Inserează un element (pereche cheie-valoare) în map. | | **insert()** | Inserează un element (pereche cheie-valoare) în map. |
Line 614: Line 615:
 </​code>​ </​code>​
  
-<note tip>​Pentru mai multe detalii despre clasele **map** și **set** recomandăm următoarele ​documentații:​+<note tip>​Pentru mai multe detalii despre clasele **map** și **set** recomandăm ​citirea ​următoarelor ​documentații ​oficiale:
   * pentru mapă puteți citi de [[https://​en.cppreference.com/​w/​cpp/​container/​map|aici]];​   * pentru mapă puteți citi de [[https://​en.cppreference.com/​w/​cpp/​container/​map|aici]];​
  
Line 622: Line 623:
 ==== Algoritmi ==== ==== Algoritmi ====
  
-Pentru a folosi algoritmii din **STL** vom include fișierul antet **''​#include <algorithm>''​**. Aceast fișier cuprinde algoritmi de **sortare**,​ **căutare**,​ **numărare** și mulți alții pe care **nu** mai trebuie să îi rescriem noi de la zero. Propunem un exemplu simplu de utlizare a funcțiilor **sort** și **count** în următorul bloc de cod C++.+Pentru a folosi algoritmii din **STL** vom include fișierul antet **''​algorithm''​**. Aceast fișier cuprinde algoritmi de **sortare**,​ **căutare**,​ **numărare** și mulți alții pe care **nu** mai trebuie să îi rescriem noi de la **zero**. Propunem un exemplu simplu de utlizare a funcțiilor **sort** și **count** în următorul bloc de cod C++.
  
 <code cpp> <code cpp>
Line 661: Line 662:
 </​code>​ </​code>​
  
-<note tip>​Pentru mai mulți algoritmi puși la dispoziție de această ​librarie ​recomandăm citirea documentației care se află chiar [[https://​en.cppreference.com/​w/​cpp/​algorithm|aici]].</​note>​+<note tip>​Pentru mai mulți algoritmi puși la dispoziție de această ​librărie ​recomandăm citirea documentației ​oficiale ​care se află chiar [[https://​en.cppreference.com/​w/​cpp/​algorithm|aici]].</​note>​
  
 ==== Concluzii ==== ==== Concluzii ====
poo-is-ab/laboratoare/11.1733675465.txt.gz · Last modified: 2024/12/08 18:31 by razvan.cristea0106
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0