Condividi tramite


Contenitori STL

La libreria STL (Standard Template Library) ISO fornisce contenitori per archiviare le raccolte di oggetti correlati. I contenitori sono classi modello che consentono la specificazione degli oggetti consentiti nei contenitori.

Nota

Questo articolo non è applicabile alla libreria STL/CLR.Per ulteriori informazioni, vedere Riferimenti della libreria STL/CLR.

I contenitori di STL possono essere suddivisi in tre categorie: contenitori sequenziali, contenitori associativi e adattatori del contenitore.

Contenitori sequenziali

I contenitori sequenziali mantengono l'ordinamento degli elementi inseriti specificati.

Un contenitore vector si comporta come una matrice, ma può automaticamente crescere come richiesto. È ad accesso casuale, viene archiviato in modo contiguo e la lunghezza è estremamente flessibile. Per questi e altri motivi, vector è il contenitore sequenziale preferito per la maggior parte delle applicazioni. Per ulteriori informazioni, vedere Classe vector.

Un contenitore array presenta alcuni dei punti di forza del contenitore vector, ma la lunghezza non è altrettanto flessibile. Per ulteriori informazioni, vedere Classe array (STL).

Un contenitore deque (coda a doppia terminazione) consente inserimenti ed eliminazioni veloci all'inizio e alla fine del contenitore. Condivide i vantaggi offerti dall'accesso casuale e dalla lunghezza flessibile del contenitore vector, ma non è contiguo. Per ulteriori informazioni, vedere Classe deque.

Un contenitore list è un elenco a doppio collegamento che consente accesso bidirezionale, inserimenti ed eliminazione veloci in un punto qualsiasi del contenitore, ma non è possibile accedere in modo casuale a un elemento del contenitore. Per ulteriori informazioni, vedere Classe list.

Un contenitore forward_list è un elenco collegato singolarmente, la versione con accesso in avanti di list. Per ulteriori informazioni, vedere Classe forward_list.

Contenitori associativi

Nei contenitori associativi, gli elementi vengono inseriti in un ordine predefinito, ad esempio in ordinamento crescente. Sono inoltre disponibili contenitori associativi non ordinati. I contenitori associativi possono essere raggruppati in due subset: mappe e set.

Una map, talvolta definita dizionario, è costituita da una coppia chiave/valore. La chiave viene utilizzata per ordinare la sequenza e il valore è associato a tale chiave. Ad esempio, una map potrebbe contenere le chiavi che rappresentano ogni parola univoca di un testo e i valori corrispondenti che rappresentano il numero di volte in cui ogni parola viene visualizzata nel testo. La versione non ordinata di map è unordered_map. Per ulteriori informazioni, vedere Classe map e Classe unordered_map.

Un set è semplicemente un contenitore crescente di elementi univoci: il valore è anche la chiave. La versione non ordinata di set è unordered_set. Per ulteriori informazioni, vedere Classe set e Classe unordered_set.

Sia map che set consentono l'inserimento nel contenitore solo di un'unica istanza di una chiave o di un elemento. Se vengono richieste più istanze di elementi, utilizzare multimap o multiset. Le versioni non ordinate sono unordered_multimap e unordered_multiset. Per ulteriori informazioni, vedere Classe multimap, Classe unordered_multimap, Classe multiset e Classe unordered_multiset.

Le mappe e i set ordinati supportano gli iteratori bidirezionali e le rispettive controparti non ordinate supportano gli iteratori in avanti. Per ulteriori informazioni, vedere Iteratori.

Adattatori del contenitore

Gli adattatori del contenitore costituiscono una variante del contenitore sequenziale o associativo che limitano l'interfaccia per una maggiore semplicità e chiarezza. Gli adattatori dei contenitori non supportano gli iteratori.

Un contenitore queue segue la semantica FIFO (first-in-first-out). Il primo elemento inserito, ovvero inserito nella coda, è il primo ad essere prelevato, ovvero rimosso dalla coda. Per ulteriori informazioni, vedere Classe queue.

Un contenitore priority_queue è organizzato in modo tale che l'elemento con il valore più alto è sempre il primo della coda. Per ulteriori informazioni, vedere Classe priority_queue.

Un contenitore stack segue la semantica LIFO (last in, first out). L'ultimo elemento inserito nello stack è il primo elemento prelevato. Per ulteriori informazioni, vedere Classe stack.

Poiché gli adattatori del contenitore non supportano gli iteratori, non possono essere utilizzati con i algoritmi STL. Per ulteriori informazioni, vedere Algoritmi.

Requisiti per gli elementi contenitore

In genere, gli elementi inseriti in un contenitore STL, se sono copiabili, possono essere quasi tutti i tipi di oggetti. Gli elementi solo mobili, quali ad esempio vector<unique_ptr<T>> creati mediante unique_ptr<> funzioneranno purché non vengano chiamate le funzioni membro che tentano di copiarli.

Il distruttore non può generare un'eccezione.

I contenitori associativi ordinati, descritti precedentemente in questo articolo, devono disporre di un operatore di confronto pubblico definito. (Per impostazione predefinita, l'operatore è operator<, ma sono supportati anche i tipi che non funzionano con operator<.

Alcune operazioni sui contenitori potrebbero anche richiedere un costruttore predefinito pubblico e un operatore di equivalenza pubblico. Ad esempio, i contenitori associativi non ordinati richiedono il supporto per le operazioni di uguaglianza e hashing.

Accesso agli elementi contenitore

Agli elementi dei contenitori si accede tramite gli iteratori. Per ulteriori informazioni, vedere Iteratori.

Nota

È inoltre possibile utilizzare i cicli for basati sull'intervallo per scorrere le raccolte STL.

Vedere anche

Riferimenti

Libreria di modelli standard

<sample container>

Sicurezza dei thread nella libreria standard C++

Concetti

Contenitori (C++ moderno)