Un contenitore è una struttura dati specifica che contiene dati, di solito in quantità illimitate. Ogni tipo di contenitore ha limitazioni su come accedere, aggiungere o rimuovere i dati in modo efficiente.
Di seguito sono riportati alcuni esempi di contenitori che utilizzano classi STL.
Sequence Container
Qui ci sono i contenitori di sequenza, il che significa che i dati siano in modo affidabile ordinata (che è, c'è un davanti e un dietro a loro. Non voglio dire che essi ordinare automaticamente se stessi!).
- A vector è un po 'come un array di dimensioni flessibili. I vettori sono ad accesso casuale, nel senso che è possibile accedere a qualsiasi elemento con indice intero in tempo costante (proprio come un array). È possibile aggiungere o rimuovere dalla fine della matrice anche in (quasi) tempo costante. Ovunque, comunque, e probabilmente stai cercando di ricopiare potenzialmente tutti gli elementi.
- A deque, o coda a doppio attacco, è come un vettore ma è possibile aggiungerlo in avanti o indietro. È ancora possibile accedere agli elementi in tempo costante, ma non è garantito che gli elementi di deque siano contigui in memoria come vettori o array.
- A elenco è un elenco collegato, che indica i dati collegati tramite puntatori. È possibile accedere in modo costante all'inizio e alla fine, ma per andare da qualche parte nel mezzo è necessario scorrere l'elenco. È possibile aggiungere elementi in qualsiasi punto dell'elenco in tempo costante, tuttavia, se si dispone già di un puntatore a uno dei nodi vicini.
associativa Container
tratta di contenitori associativi, il che significa che gli elementi non ordinate ma invece hanno associazioni con l'altro utilizzato per determinare mapping unicità o:
- Un impostare è un contenitore con elementi unici. È possibile aggiungere solo uno di ciascun elemento a un set; eventuali altre aggiunte vengono ignorate.
- Un multiset è come un set, ma è possibile inserire più di un elemento in. Il multiset tiene traccia di quanti di ciascun tipo di elemento si trovano nella struttura.
- A mappa, noto anche come array associativo, è una struttura in cui si inseriscono coppie chiave-valore; quindi puoi cercare qualsiasi valore fornendo la chiave. Quindi è un po 'come un array a cui è possibile accedere con un indice di stringa (chiave) o qualsiasi altro tipo di indice. (Se si inserisce un'altra coppia di valori-chiave e la chiave esiste già, poi basta sovrascrivere il valore della chiave originale.)
- Un multimap è una mappa che consente l'inserimento di più valori per la stessa chiave. Quando esegui una ricerca chiave, recuperi un contenitore con tutti i valori in esso contenuti.
alimentatori container adattatori
Container, invece, sono interfacce create limitando funzionalità in un preesistente contenitore e una serie diversa di funzionalità. Quando si dichiarano gli adattatori contenitore, si ha la possibilità di specificare quali contenitori sequenza formano il contenitore sottostante. Questi sono:
- Una pila è un contenitore che fornisce l'accesso Last-In, First-Out (LIFO). Fondamentalmente, rimuovi gli elementi nell'ordine inverso in cui li inserisci. È difficile arrivare a qualsiasi elemento nel mezzo. Di solito questo va in cima ad un deque .
- Una coda è un contenitore che fornisce l'accesso FIFO (First-In, First-Out). Rimuovi elementi nello stesso ordine in cui li inserisci. È difficile arrivare a qualsiasi elemento nel mezzo. Di solito questo va in cima ad un deque .
- A priority_queue è un contenitore che fornisce l'accesso agli elementi per l'ordine ordinato. È possibile inserire elementi in qualsiasi ordine e quindi recuperare il "più basso" di questi valori in qualsiasi momento. Le code prioritarie in C++ STL utilizzano una struttura heap internamente, che a sua volta è fondamentalmente supportata da array; quindi, di solito questo va sopra un vettore .
Vedere this reference page per ulteriori informazioni, inclusa la complessità temporale per ciascuna operazione e collegamenti a pagine dettagliate per ciascun tipo di contenitore.
fonte
2010-10-06 15:16:46
Ho difficoltà a vedere cosa intendi con "un esempio pratico"; Ho difficoltà a provare a pensare a un momento in cui non dovresti usare un contenitore (che si tratti di un container di STL o di uno di Boost o di uno che implementa tu stesso). Praticamente ogni volta che hai una collezione di oggetti che usi un contenitore ... –
@James McNellis - Con l'esempio pratico intendevo un esempio di qualsiasi ambiente in cui è stato applicato. Ma comunque, ho capito il tuo punto.I Posso essere fraseggio la mia domanda erroneamente. Grazie. – Pavitar