English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
STL è l'acronimo di “Standard Template Library”, che in cinese si traduce in “libreria di template standard”. La STL fa parte della libreria standard di C++, non è necessario installarla separatamente.
Nei capitoli precedenti, abbiamo già studiato il concetto di template in C++. La STL (Standard Template Library) di C++ è una serie di classi di template potenti, che forniscono classi di template e funzioni universali, che possono implementare molti algoritmi e strutture dati popolari e comuni, come vettori, liste, code, stack.
C++ supporta molto bene i template (Template), STL
È stato realizzato utilizzando il template per implementare tutte le strutture dati comuni e le loro algoritmi, e ha raggiunto la separazione tra strutture dati e algoritmi. Ad esempio, la base di vector è una tabella ordinata (array), list
Il fondamento è una lista a doppio collegamento, la deque è una coda circolare, il set è un albero rubino, e hash_set è una tabella hash.
Il cuore della libreria di template standard C++ include i seguenti tre componenti:
Componenti | Descrizione |
---|---|
Contenitori (Containers) | I contenitori sono usati per gestire raccolte di oggetti di un tipo specifico. Il C++ fornisce vari tipi di contenitori, come deque, list, vector, map, ecc. |
Algoritmi (Algorithms) | Gli algoritmi agiscono sui contenitori. Forniscono modi per eseguire varie operazioni, tra cui inizializzare, ordinare, cercare e trasformare il contenuto dei contenitori. |
Iteratori (iterators) | Gli iteratori vengono utilizzati per esplorare gli elementi di una raccolta di oggetti. Queste raccolte possono essere contenitori o sottoinsiemi di contenitori. |
Questi tre componenti offrono una vasta gamma di funzioni predefinite, che ci aiutano a gestire compiti complessi in modo semplice.
Il seguente programma dimostra il contenitore vettore (un template standard C++), che è molto simile agli array, con la differenza che il vettore gestisce automaticamente le proprie esigenze di memoria di archiviazione quando è necessario espandere la dimensione:
#include <iostream> #include <vector> using namespace std; int main() { // Creare un vettore per memorizzare int vector<int> vec; int i; // Visualizzare la dimensione originale di vec cout << "La dimensione originale di vec = " << vec.size() << endl; // Aggiungere 6 valori al vettore for(i = 0; i < 6; i++){ vec.push_back(i+1); } // Visualizzare la dimensione estesa di vec cout << "La dimensione estesa di vec = " << vec.size() << endl; // Accedere ai 5 valori nella vettore for(i = 0; i < 5; i++){ cout << "vec[" << i << "] di valore = " << vec[i] << endl; } // Utilizzare l'iteratore 'iterator' per accedere ai valori vector<int>::iterator v = vec.begin(); while( v != vec.end()) { cout << "Il valore di v = " << *v << endl; v++; } return 0; }
Quando il codice sopra viene compilato ed eseguito, produrrà i seguenti risultati:
La dimensione originale di 'vec' = 0 La dimensione estesa di 'vec' = 6 Il valore di 'vec[0]' è = 1 Il valore di 'vec[1]' è = 2 Il valore di vec[2] = 3 Il valore di vec[3] = 4 Il valore di vec[4] = 5 Il valore di vec[5] = 6 Il valore di v = 1 Il valore di v = 2 Il valore di v = 3 Il valore di v = 4 Il valore di v = 5 Il valore di v = 6
Notare alcuni punti riguardanti le varie funzioni utilizzate nell'esempio sopra:
Il membro della funzione push_back() inserisce un valore alla fine del vettore, espandendo la dimensione del vettore se necessario.
La funzione size() mostra la dimensione del vettore.
La funzione begin() restituisce un iteratore che punta all'inizio del vettore.
La funzione end() restituisce un iteratore che punta all'ultimo elemento del vettore.