Raccolte
La libreria MFC fornisce classi di raccolte per gestire gruppi di oggetti. Queste classi sono di due tipi:
Classi di raccolte create dai modelli C++
Classi di raccolte non create dai modelli C++
Nota
Se il codice utilizza già le classi di raccolte non create da modelli, è possibile continuare a utilizzarle.Se si scrivono nuove classi di raccolte indipendenti dai tipi per i tipi di dati personalizzati, è consigliabile utilizzare le più recenti classi basate su modelli.
Forme delle Raccolte
Una classe di raccolta è caratterizzata dalla "forma" e dai tipi dei relativi elementi. La forma fa riferimento al modo in cui gli oggetti sono organizzati e archiviati dalla raccolta. MFC fornisce tre forme base di raccolta: elenchi, matrici e mappe (denominate anche dizionari). È possibile selezionare la forma di raccolta più appropriata al problema specifico di programmazione.
Ciascuna delle forme di raccolta fornite è descritta brevemente più avanti in questo argomento. Per confrontare le funzionalità delle forme utili per decidere quale è ottimale per il programma, vedere Suggerimenti per la scelta di una classe di raccolte.
Elenco
La classe di elenco fornisce un elenco di elementi ordinato e non indicizzato, implementato come elenchi collegati doppiamente. Un elenco ha "una testa" e "un elemento di coda," e l'aggiunta o la rimozione di elementi dalla testa o viceversa, o inserire o eliminare elementi al centro, è molto veloce.
Matrice
La classe array fornisce un array di oggetti ridimensionato dinamicamente, ordinata e indicizzata per interi.
Mappa (denominata anche dizionario)
Una mappa è una raccolta che associa un oggetto chiave con un oggetto valore.
Classi di Raccolte basate su modello
Il modo più semplice per implementare una raccolta indipendente dai tipi che contiene oggetti di qualsiasi tipo è utilizzare una delle classi MFC basate su modelli. Per esempi di queste classi, vedere l'esempio COLLECT MFC.
Nella tabella seguente vengono elencate le classi di raccolta MFC basate su modelli.
Classi Modello di Raccolta
Contenuto della Raccolta |
Matrici |
Elenchi |
Mappe |
---|---|---|---|
Insiemi di oggetti di qualsiasi tipo. |
CArray |
CList |
CMap |
Raccolte di puntatori a oggetti di qualsiasi tipo |
CTypedPtrArray |
CTypedPtrList |
CTypedPtrMap |
Le Classi di Raccolta non basate su modelli
Se l'applicazione utilizza già le classi di raccolta MFC non create da modelli, è possibile continuare a utilizzarle. Tuttavia, per le nuove raccolte, è consigliabile utilizzare le classi basate su modelli. Nella tabella seguente sono elencate le classi di raccolta MFC che non sono basate su modelli.
Classi di Raccolta non basate su modelli
Matrici |
Elenchi |
Mappe |
---|---|---|
CObArray |
CObList |
CMapPtrToWord |
CByteArray |
CPtrList |
CMapPtrToPtr |
CDWordArray |
CStringList |
CMapStringToOb |
CPtrArray |
|
CMapStringToPtr |
CStringArray |
|
CMapStringToString |
CWordArray |
|
CMapWordToOb |
CUIntArray |
|
CMapWordToPtr |
Le caratteristiche della tabella delle classi di raccolta MFC in Suggerimenti per la scelta di una classe di raccolte descrive le classi di raccolta MFC in termini di queste caratteristiche (diverse dalla forma):
Se la classe utilizza modelli C++
Se gli elementi memorizzati nella raccolta possono essere serializzati
Se agli elementi memorizzati nella raccolta è possibile eseguire il dump per la diagnostica
Se la raccolta è indipendente dai tipi