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:
- Algoritmi
- Contenitori
- Funzioni
- 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:
- push_back (valore): questo metodo aggiunge i dati al vettore.
- pop_back(): questo metodo rimuove l'ultimo elemento dal vettore.
- inserire (indice, valore): questo metodo inserisce nuovi elementi prima dell'elemento nella posizione specificata.
- dimensione(): questo metodo restituisce la dimensione del vettore.
- vuoto(): questo metodo controlla se il vettore è vuoto o meno.
- davanti(): questo metodo restituisce il primo valore del vettore.
- indietro(): il metodo back restituisce l'ultimo valore del vettore.
- a (indice): questo metodo restituisce il valore nella posizione specificata.
- cancellare (indice): il metodo di cancellazione rimuove gli elementi dall'indice specificato.
- 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:
- spingere (valore): questo metodo aggiunge elementi alla coda.
- pop(): questo metodo elimina il primo elemento della coda.
- dimensione(): questo metodo restituisce la dimensione della coda.
- davanti(): questo metodo restituisce il primo elemento della coda.
- 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:
- spingere (valore): questo metodo inserisce l'elemento nello stack.
- pop(): questo metodo elimina l'elemento superiore dello stack.
- superiore(): questo metodo restituisce il valore dell'ultimo elemento inserito nello stack.
- dimensione(): questo metodo restituisce la dimensione dello stack.
- 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:
- inserire (valore): questo metodo inserisce elementi nel set.
- inizio(): questo metodo restituisce l'iteratore al primo elemento del set.
- fine(): questo metodo restituisce l'iteratore all'ultimo elemento del set.
- dimensione(): questo metodo restituisce la dimensione del set.
- vuoto(): questo metodo controlla se il set è vuoto o meno.
- 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.
- 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.
Vuoi imparare il C++? Ecco i migliori siti Web e corsi online su C++ per principianti e programmatori esperti.
Leggi Avanti
- Programmazione
- Tutorial sulla programmazione
- Programmazione funzionale
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.
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.