C ++ este unul dintre cele mai puternice și intimidante limbaje de programare pe care le-ați putea întâlni ca începător. Motivul este destul de simplu. Este nevoie de mult cod pentru a obține rezultatul dorit. Biblioteca standard de șabloane, sau STL, vă poate ajuta să rezolvați această enigmă.

Având în vedere cantitatea de timp și efort consumat în timpul scrierii codului pentru funcții precum sortare și căutare, STL vă poate ajuta să efectuați toate aceste operații cu o singură linie de cod. Această bibliotecă poate fi extrem de utilă pentru rezolvarea problemelor și pregătirea interviurilor tehnice.

Ce este biblioteca standard de șabloane?

Biblioteca de șabloane standard, sau STL, este o bibliotecă C ++ care constă din funcții și containere predefinite. Include câteva clase de șabloane proeminente pentru structuri de date obișnuite, cum ar fi vectori, stive, cozi și câteva funcții algoritmice la îndemână, cum ar fi căutarea binară, pentru a face programarea mai ușoară.

Biblioteca de șabloane standard din C ++ constă din patru componente:

instagram viewer
  1. Algoritmi
  2. Containere
  3. Funcții
  4. Iteratori

Să aruncăm o privire la algoritmii și containerele în profunzime mai mare, deoarece acestea sunt cele mai utilizate componente ale STL.

Algoritmi în STL

fișierul antet este o parte a STL care constă din mai multe funcții algoritmice care pot fi utilizate în loc să le codeze manual. Unii dintre algoritmii incluși sunt căutarea binară, sortarea și inversarea, care sunt extrem de utile.

Pentru început, trebuie să importați fișierul antetul în fișierul dvs. C ++. Sintaxa este următoarea:

#include 

Pentru metodele viitoare, luați în considerare o variabilă matrice cu valorile {6, 2, 9, 1, 4} ca exemplu.

int arr [] = {6, 2, 9, 1, 4};

fel()

fel() funcția vă ajută să sortați toate elementele din structura de date specificată în ordine crescătoare. Această funcție ia doi parametri: iteratorul inițial și iteratorul final.

Legate de: O introducere în algoritmul de sortare Merge

Sintaxă:

sortare (start_iterator, end_iterator);

Iată un exemplu rapid:

sortare (arr, arr + 5);
pentru (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}

Ieșire:

1 2 4 6 9

verso()

verso() funcția inversează ordinea elementelor din structura de date specificată. Acceptă doi parametri: iteratorul inițial și iteratorul final.

Sintaxă:

invers (start_iterator, end_iterator);

Iată un scurt exemplu pentru metoda de mai sus:

invers (arr, arr + 5);
pentru (int i = 0; i <5; i ++) {
cout << arr [i] << "";
}

Ieșire:

4 1 9 2 6

* min_element () și * max_element ()

Funcțiile * max_element () și * min_element () returnează valoarea maximă și cea minimă în interiorul structurii de date specificate, respectiv. Ambele funcții acceptă două argumente: iteratorul inițial și iteratorul final.

Sintaxă:

* max_element (start_iterator, end_iterator);
* min_element (start_iterator, end_iterator);

Să aflăm ce valori returnează aceste funcții la apelarea acestora în matricea de exemplu:

cout << * max_element (arr, arr + 5) << endl;
cout << * min_element (arr, arr + 5) << endl;

Ieșire:

9
1

binary_search ()

binary_search () metoda este utilizată pentru a afla dacă valoarea specificată este prezentă în structura datelor sau nu. Acceptă trei argumente: iteratorul inițial, iteratorul final și valoarea pe care doriți să o găsiți.

Căutarea binară funcționează numai pe structuri de date sortate. Prin urmare, va trebui să apelați fel() prima metodă înainte de binary_search () metodă.

Sintaxă:

binary_search (start_iterator, end_iterator, value_to_find)

Iată o demonstrație a acestei metode:

sortare (arr, arr + 5);
binary_search (arr, arr + 5, 2)? cout << "Element găsit": cout << "Element nu a fost găsit";
binary_search (arr, arr + 5, 7)? cout << "Element găsit": cout << "Element nu a fost găsit";

Ieșire:

Element găsit
Elementul nu a fost găsit

numara()

numara() metoda returnează numărul de apariții al valorii specificate în structura datelor. Este nevoie de trei argumente: iteratorul inițial, iteratorul final și valoarea de numărat.

Sintaxă:

count (start_iterator, end_iterator, value_to_count);

Iată un exemplu al acestei metode:

cout << count (arr, arr + 5, 2) << endl;

Ieșire:

1

Containere în STL

Containerele sunt structurile de date care stochează obiecte și date. Vectori, liste, stive, cozi, seturi și hărți sunt câteva dintre exemplele care stochează date în ele în funcție de tipul de date primitiv specificat. Puteți utiliza aceste containere importând antetele respective în fișierul C ++.

În timp ce inițializați variabila container, trebuie să menționați datele primitive, cum ar fi int, char, şir în interiorul <> paranteze.

Să explorăm câteva dintre aceste containere în detaliu:

Vector

Vectorii sunt tablouri dinamice care sunt redimensionabile și flexibile pentru a lucra. Când introduceți sau ștergeți un element din vector, acesta ajustează automat dimensiunea vectorului. Acest lucru este similar cu Structura datelor ArrayList în Java.

Sintaxă:

#include 
vector nume_variabil;

Iată câteva metode vectoriale importante:

  1. push_back (valoare): Această metodă adaugă datele la vector.
  2. pop_back (): Această metodă elimină ultimul element din vector.
  3. inserare (index, valoare): Această metodă introduce elemente noi înaintea elementului în poziția specificată.
  4. mărimea(): Această metodă returnează dimensiunea vectorului.
  5. gol(): Această metodă verifică dacă vectorul este gol sau nu.
  6. față(): Această metodă returnează prima valoare a vectorului.
  7. înapoi(): Metoda back returnează ultima valoare a vectorului.
  8. la (index): Această metodă returnează valoarea la poziția specificată.
  9. șterge (index): Metoda de ștergere elimină elemente din indexul dat.
  10. clar(): Această metodă șterge toate elementele din vector.
vector  v = {23, 12, 56, 10};
v.push_back (5);
v.push_back (25);
v.pop_back ();
auto i = v.insert (v.begin () + 1, 7);
cout << "Dimensiunea vectorului dat" << v.size () << endl;
if (v.empty ()) {
cout << "Vectorul este gol" << endl;
} altceva {
cout << "Vectorul nu este gol" << endl;
}
cout << "Elementul din prima poziție este" << v.front () << endl;
cout << "Elementul din ultima poziție este" << v.back () << endl;
cout << "Elementul în poziția dată este" << v.at (4) << endl;
v.erase (v.begin () + 1);
pentru (int i = 0; i cout << v [i] << "";
}

Ieșire:

Mărimea vectorului dat 6
Vectorul nu este gol
Elementul din prima poziție este 23
Elementul din ultima poziție este 5
Elementul în poziția dată este 10
23 12 56 10 5

Coadă

În structura de date a cozii, elementele sunt inserate din spate și șterse din față. Prin urmare, urmează abordarea FIFO („primul intrat, primul ieșit”).

Sintaxă:

#include 
coadă nume_variabil;

Iată câteva metode importante de coadă:

  1. împinge (valoare): Această metodă adaugă elemente la coadă.
  2. pop (): Această metodă șterge primul element al cozii.
  3. mărimea(): Această metodă returnează dimensiunea cozii.
  4. față(): Această metodă returnează primul element al cozii.
  5. înapoi(): Această metodă returnează ultimul element al cozii.
coadă  q;
q.push (30);
q.push (40);
q.push (50);
q.push (60);
q.push (70);
cout << "Primul element este" << q.front () << endl;
cout << "Ultimul element este" << q.back () << endl;
cout << "Dimensiunea cozii este" << q.size () << endl;
q.pop ();
cout << "Tipărirea tuturor elementelor cozii" << endl;
while (! q.empty ()) {
cout << q.front () << "";
q.pop ();
}

Ieșire:

Primul element este 30
Ultimul element este 70
Dimensiunea cozii este de 5
Tipărirea tuturor elementelor cozii
40 50 60 70

Grămadă

Containerele stiva funcționează pe metoda LIFO. LIFO înseamnă „ultimul intrat, primul ieșit”. Datele sunt împinse și afișate de la același capăt.

Sintaxă:

#include 
grămadă nume_variabil;

Iată câteva metode importante de stivă:

  1. împinge (valoare): Această metodă împinge elementul din stivă.
  2. pop (): Această metodă șterge elementul de sus al stivei.
  3. top(): Această metodă returnează valoarea ultimului element introdus în stivă.
  4. mărimea(): Această metodă returnează dimensiunea stivei.
  5. gol(): Această metodă verifică dacă stiva este goală sau nu.
stiva  s;
s.push (30);
s.push (40);
s.push (50);
s.push (60);
cout << "Partea de sus a stivei conține" << s.top () << endl;
s.pop ();
cout << "Partea de sus a stivei după efectuarea operației pop:" << s.top () << endl;
cout << "Tipărirea tuturor elementelor stivei" << endl;
while (! s.empty ()) {
cout << s.top () << "";
s.pop ();
}

Ieșire:

Partea de sus a stivei conține 60
Partea de sus a stivei după efectuarea operației pop: 50
Tipărirea tuturor elementelor stivei
50 40 30

A stabilit

Containerele de seturi sunt utilizate pentru a păstra valori unice, iar valoarea elementului nu poate fi modificată odată ce a fost inserată în set. Toate elementele din set sunt stocate într-un mod sortat. Containerul set este similar cu setează structura datelor în Python.

Sintaxă:

#include 
a stabilit nume_variabil;

Iată câteva metode importante:

  1. inserare (valoare): Această metodă introduce elemente în set.
  2. începe(): Această metodă returnează iteratorul la primul element al setului.
  3. Sfârșit(): Această metodă readuce iteratorul la ultimul element al setului.
  4. mărimea(): Această metodă returnează dimensiunea setului.
  5. gol(): Această metodă verifică dacă setul este gol sau nu.
  6. găsi (valoare): Această metodă returnează iteratorul la elementul trecut în parametru. Dacă elementul nu este găsit, atunci această funcție readuce iteratorul la sfârșitul setului.
  7. șterge (valoare): Această metodă a șters elementul specificat din set.
set  s;
s. inserare (20);
s. inserare (30);
s. inserare (40);
s. inserare (50);
s. inserare (60);
s. inserare (60);
s. inserare (60);
auto i = s.begin ();
cout << "Element în prima poziție" << * i << endl;
cout << "Dimensiunea setului" << s.size () << endl;
s.find (20)! = s.end ()? cout << "Element găsit" << endl: cout << "Element nu a fost găsit" << endl;
erază (30);
cout << "Tipărirea tuturor elementelor" << endl;
for (auto i = s.begin (); i! = s.end (); i ++) {
cout << * i << "";
}

Ieșire:

Element în prima poziție 20
Dimensiunea setului 5
Element găsit
Tipărirea tuturor elementelor
20 40 50 60

C ++ nu trebuie să fie greu

La fel ca orice altă abilitate, practica este esențială pentru a profita la maximum de STL. Aceste containere și algoritmi vă pot ajuta să economisiți mult timp și sunt ușor de utilizat. Începeți prin exersarea exemplelor prezentate mai sus și, în cele din urmă, veți începe să îl folosiți și în propriile dvs. proiecte.

Cu toate acestea, dacă este prima dată când înveți C ++, începe prin a învăța elementele de bază înainte de a înțelege STL.

E-mail
Cum să învățați programarea C ++: 6 site-uri pentru a începe

Doriți să învățați C ++? Iată cele mai bune site-uri web și cursuri online către C ++ atât pentru începători, cât și pentru programatori de experiență.

Citiți în continuare

Subiecte asemănătoare
  • Programare
  • Tutoriale de codare
  • Programare funcțională
Despre autor
Nitin Ranganath (22 articole publicate)

Nitin este un dezvoltator pasionat de software și un student în ingineria computerelor care dezvoltă aplicații web folosind tehnologii JavaScript. Lucrează ca dezvoltator web independent și îi place să scrie pentru Linux și Programare în timpul liber.

Mai multe de la Nitin Ranganath

Aboneaza-te la newsletter-ul nostru

Alăturați-vă newsletterului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Încă un pas…!

Vă rugăm să confirmați adresa de e-mail în e-mailul pe care tocmai vi l-am trimis.

.