C++ è uno dei linguaggi di programmazione più potenti e intimidatori che potresti incontrare come principiante. Il motivo è abbastanza semplice. Richiede molto codice per ottenere l'output desiderato. La libreria di modelli standard, o STL, può aiutarti a risolvere questo enigma.

Considerando la quantità di tempo e sforzo consumati durante la scrittura del codice per funzioni come l'ordinamento e la ricerca, STL può aiutarti a eseguire tutte queste operazioni con una sola riga di codice. Questa libreria può essere estremamente utile per la risoluzione dei problemi e la preparazione di colloqui tecnici.

Che cos'è la libreria di modelli standard?

La Standard Template Library, o STL, è una libreria C++ composta da funzioni e contenitori predefiniti. Include alcune classi di modelli importanti per strutture di dati comuni come vettori, stack, code e alcune utili funzioni algoritmiche come la ricerca binaria per semplificare la programmazione.

La libreria di modelli standard in C++ è composta da quattro componenti:

instagram viewer
  1. Algoritmi
  2. Contenitori
  3. Funzioni
  4. Iteratori

Diamo uno sguardo più approfondito agli algoritmi e ai contenitori, poiché questi sono i componenti più comunemente usati dell'STL.

Algoritmi in STL

Il il file di intestazione è una parte dell'STL che consiste in diverse funzioni algoritmiche che possono essere utilizzate invece di codificarle manualmente. Alcuni degli algoritmi inclusi sono la ricerca binaria, l'ordinamento e l'inversione, che sono estremamente utili.

Per cominciare, devi importare il header nel tuo file C++. La sintassi è la seguente:

#includere 

Per i prossimi metodi, considera una variabile di matrice con i valori di {6, 2, 9, 1, 4} come esempio.

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

ordinare()

Il ordinare() La funzione ti aiuta a ordinare tutti gli elementi all'interno della struttura dati specificata in ordine crescente. Questa funzione accetta due parametri: l'iteratore iniziale e l'iteratore finale.

Relazionato: Introduzione all'algoritmo Merge Sort

Sintassi:

sort (start_iterator, end_iterator);

Ecco un rapido esempio:

ordina (arr, arr+5);
per (int i = 0; io < 5; io++) {
cout << arr[i] << " ";
}

Produzione:

1 2 4 6 9

inversione()

Il inversione() La funzione inverte l'ordine degli elementi nella struttura dati specificata. Accetta due parametri: l'iteratore iniziale e l'iteratore finale.

Sintassi:

reverse (start_iterator, end_iterator);

Ecco un breve esempio per il metodo sopra:

inverso (arr, arr+5);
per (int i = 0; io < 5; io++) {
cout << arr[i] << " ";
}

Produzione:

4 1 9 2 6

*min_element() e *max_element()

Le funzioni *elemento_max() e *min_elemento() restituiscono rispettivamente il valore massimo e minimo all'interno della struttura dati specificata. Entrambe queste funzioni accettano due argomenti: l'iteratore di inizio e l'iteratore di fine.

Sintassi:

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

Scopriamo quali valori restituiscono queste funzioni quando le chiamano sull'array di esempio:

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

Produzione:

9
1

binary_search()

Il binary_search() Il metodo viene utilizzato per scoprire se il valore specificato è presente o meno all'interno della struttura dati. Accetta tre argomenti: l'iteratore iniziale, l'iteratore finale e il valore che si desidera trovare.

La ricerca binaria funziona solo su strutture dati ordinate. Pertanto, dovrai chiamare il ordinare() metodo prima di binary_search() metodo.

Sintassi:

binary_search (start_iterator, end_iterator, value_to_find)

Ecco una dimostrazione di questo metodo:

ordina (arr, arr+5);
binary_search (arr, arr+5, 2)? cout << "Elemento trovato": cout << "Elemento non trovato";
binary_search (arr, arr+5, 7)? cout << "Elemento trovato": cout << "Elemento non trovato";

Produzione:

Elemento trovato
Elemento non trovato

contare()

Il contare() Il metodo restituisce il conteggio delle occorrenze del valore specificato all'interno della struttura dati. Richiede tre argomenti: l'iteratore iniziale, l'iteratore finale e il valore da contare.

Sintassi:

count (start_iterator, end_iterator, value_to_count);

Ecco un esempio di questo metodo:

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

Produzione:

1

Contenitori in STL

I contenitori sono le strutture di dati che archiviano oggetti e dati. Vettori, elenchi, pile, code, insiemi e mappe sono alcuni degli esempi che memorizzano i dati in essi in base al tipo di dati primitivo specificato. È possibile utilizzare questi contenitori importando le rispettive intestazioni nel file C++.

Durante l'inizializzazione della variabile contenitore, è necessario menzionare i dati primitivi come int, char, corda dentro il <> parentesi.

Esploriamo alcuni di questi contenitori in modo più dettagliato:

Vettore

I vettori sono array dinamici ridimensionabili e flessibili con cui lavorare. Quando inserisci o elimini un elemento dal vettore, regola automaticamente le dimensioni del vettore. Questo è simile al Struttura dati ArrayList in Giava.

Sintassi:

#includere 
vettore nome_variabile;

Ecco alcuni importanti metodi vettoriali:

  1. push_back (valore): questo metodo aggiunge i dati al vettore.
  2. pop_back(): questo metodo rimuove l'ultimo elemento dal vettore.
  3. inserire (indice, valore): questo metodo inserisce nuovi elementi prima dell'elemento nella posizione specificata.
  4. dimensione(): questo metodo restituisce la dimensione del vettore.
  5. vuoto(): questo metodo controlla se il vettore è vuoto o meno.
  6. davanti(): questo metodo restituisce il primo valore del vettore.
  7. indietro(): il metodo back restituisce l'ultimo valore del vettore.
  8. a (indice): questo metodo restituisce il valore nella posizione specificata.
  9. cancellare (indice): il metodo di cancellazione rimuove gli elementi dall'indice specificato.
  10. chiaro(): questo metodo cancella tutti gli elementi nel vettore.
vettore < int > 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 << "La dimensione del vettore dato " << v.size() << endl;
if (v.empty()) {
cout<} altro {
cout<}
cout << "L'elemento in prima posizione è " << v.front() << endl;
cout << "L'elemento nell'ultima posizione è " << v.back() << endl;
cout << "L'elemento nella posizione data è " << v.at (4) << endl;
v.erase (v.begin() + 1);
per (int i = 0; i < v.size(); io++) {
cout << v[i] << " ";
}

Produzione:

La dimensione del vettore dato 6
Il vettore non è vuoto
L'elemento in prima posizione è 23
L'elemento nell'ultima posizione è 5
L'elemento nella posizione data è 10
23 12 56 10 5

Coda

Nella struttura dei dati della coda, gli elementi vengono inseriti dal retro ed eliminati dal davanti. Quindi, segue l'approccio FIFO ("first in, first out").

Sintassi:

#includere 
coda nome_variabile;

Ecco alcuni importanti metodi di coda:

  1. spingere (valore): questo metodo aggiunge elementi alla coda.
  2. pop(): questo metodo elimina il primo elemento della coda.
  3. dimensione(): questo metodo restituisce la dimensione della coda.
  4. davanti(): questo metodo restituisce il primo elemento della coda.
  5. indietro(): questo metodo restituisce l'ultimo elemento della coda.
coda < int > q;
q.push (30);
q.push (40);
q.push (50);
q.push (60);
q.push (70);
cout << "Il primo elemento è " << q.front() << endl;
cout << "L'ultimo elemento è " << q.back() << endl;
cout << "La dimensione della coda è " << q.size() << endl;
q.pop();
cout << "Stampa tutti gli elementi della coda" << endl;
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}

Produzione:

Il primo elemento è 30
L'ultimo elemento è 70
La dimensione della coda è 5
Stampa di tutti gli elementi della coda
40 50 60 70

Pila

I contenitori impilabili funzionano con il metodo LIFO. LIFO sta per "last in, first out". I dati vengono spinti e estratti dalla stessa estremità.

Sintassi:

#includere 
pila nome_variabile;

Ecco alcuni importanti metodi di stack:

  1. spingere (valore): questo metodo inserisce l'elemento nello stack.
  2. pop(): questo metodo elimina l'elemento superiore dello stack.
  3. superiore(): questo metodo restituisce il valore dell'ultimo elemento inserito nello stack.
  4. dimensione(): questo metodo restituisce la dimensione dello stack.
  5. vuoto(): questo metodo controlla se lo stack è vuoto o meno.
pila < int > s;
s.push (30);
s.push (40);
s.push (50);
s.push (60);
cout << "La cima dello stack contiene " << s.top() << endl;
s.pop();
cout << "La cima dello stack dopo aver eseguito l'operazione pop: " << s.top() << endl;
cout << "Stampa tutti gli elementi dello stack" << endl;
mentre (!s.empty()) {
cout << s.top() << " ";
s.pop();
}

Produzione:

La parte superiore dello stack contiene 60
La parte superiore dello stack dopo aver eseguito l'operazione pop: 50
Stampa di tutti gli elementi della pila
50 40 30

Impostato

I contenitori di set vengono utilizzati per contenere valori univoci e il valore dell'elemento non può essere modificato una volta inserito nel set. Tutti gli elementi dell'insieme vengono archiviati in modo ordinato. Il contenitore del set è simile al imposta la struttura dei dati in Python.

Sintassi:

#includere 
impostato nome_variabile;

Ecco alcuni importanti metodi di impostazione:

  1. inserire (valore): questo metodo inserisce elementi nel set.
  2. inizio(): questo metodo restituisce l'iteratore al primo elemento del set.
  3. fine(): questo metodo restituisce l'iteratore all'ultimo elemento del set.
  4. dimensione(): questo metodo restituisce la dimensione del set.
  5. vuoto(): questo metodo controlla se il set è vuoto o meno.
  6. trova (valore): questo metodo restituisce l'iteratore all'elemento passato nel parametro. Se l'elemento non viene trovato, questa funzione restituisce l'iteratore alla fine dell'insieme.
  7. cancellare (valore): questo metodo ha eliminato l'elemento specificato dal set.
set < int > s;
s.inserto (20);
s.inserto (30);
s.inserto (40);
s.inserto (50);
s.inserto (60);
s.inserto (60);
s.inserto (60);
auto i = s.begin();
cout << "Elemento alla prima posizione " << * i << endl;
cout << "La dimensione del set " << s.size() << endl;
s.find (20) != s.end()? cout << "Elemento trovato" << endl: cout << "Elemento non trovato" << endl;
s.cancellare (30);
cout<for (auto i = s.begin(); io != s.end(); io++) {
cout << * io << " ";
}

Produzione:

Elemento in prima posizione 20
La dimensione del set 5
Elemento trovato
Stampa di tutti gli elementi
20 40 50 60

C++ non deve essere difficile

Proprio come ogni altra abilità, la pratica è essenziale per ottenere il massimo dall'STL. Questi contenitori e algoritmi possono aiutarti a risparmiare molto tempo e sono facili da usare. Inizia esercitandoti con gli esempi mostrati sopra e alla fine inizierai a usarlo anche nei tuoi progetti.

Tuttavia, se è la prima volta che impari il C++, inizia imparando le basi prima di procedere con la comprensione dell'STL.

E-mail
Come imparare la programmazione C++: 6 siti per iniziare

Vuoi imparare il C++? Ecco i migliori siti Web e corsi online su C++ per principianti e programmatori esperti.

Leggi Avanti

Argomenti correlati
  • Programmazione
  • Tutorial sulla programmazione
  • Programmazione funzionale
Circa l'autore
Nitin Ranganath (22 articoli pubblicati)

Nitin è un appassionato sviluppatore di software e uno studente di ingegneria informatica che sviluppa applicazioni web utilizzando le tecnologie JavaScript. Lavora come sviluppatore web freelance e gli piace scrivere per Linux e Programmazione nel suo tempo libero.

Altro da Nitin Ranganath

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per consigli tecnici, recensioni, ebook gratuiti e offerte esclusive!

Ancora un passo…!

Conferma il tuo indirizzo e-mail nell'e-mail che ti abbiamo appena inviato.

.