Suggerimenti per la scelta di una classe di raccolte
Questo articolo vengono fornite informazioni dettagliate progettata per facilitare la scelta di una classe di raccolte alle proprie esigenze particolari di applicazione.
La scelta di una classe di raccolte dipende da numerosi fattori, tra cui:
Le funzionalità della forma della classe: ordine, indici e prestazioni, come indicato nella tabella di Funzionalità di raccolta forma più avanti in questo argomento
Se la classe utilizza i modelli C++
Se gli elementi memorizzati nella raccolta possono essere serializzati
Se gli elementi memorizzati nella raccolta è possibile eseguire il dump per la diagnostica
Se la raccolta è indipendente dai tipi
La tabella riportata di seguito, Funzionalità di raccolta forma, riepilogate le caratteristiche delle forme di raccolta disponibili.
Le colonne 2 e 3 descrivono le caratteristiche dell'ordine e accesso di ogni forma. Nella tabella, il termine "ordinato" significa che l'ordine in cui gli elementi vengono inseriti ed eliminate determinare il relativo ordine nella raccolta; non significa che gli elementi vengono ordinati in base al relativo contenuto. Il termine "indicizzato" significa che gli elementi nella raccolta possono essere recuperati da un intero, come gli elementi in una matrice tipica.
Le colonne 4 e 5 descrivono le prestazioni di ogni forma. Nelle applicazioni che richiedono molti inserimenti nella raccolta, la velocità di inserimento può essere particolarmente importante; per altre applicazioni, la velocità di ricerca può essere più importante.
La colonna 6 indica se ogni forma agli elementi duplicati.
Funzionalità di raccolta forma
Forma |
Ordinato? |
Indicizzato? |
Inserire un elemento |
Trovare l'elemento specificato |
Duplicare gli elementi? |
---|---|---|---|---|---|
Elenco |
Yes |
No |
Fast |
Rallenti |
Yes |
Matrice |
Yes |
Da int |
Rallenti |
Rallenti |
Yes |
Mappa |
No |
La chiave |
Fast |
Fast |
No (chiave) sì (valori) |
La tabella riportata di seguito, Caratteristiche delle classi collection MFC, riepilogate le altre caratteristiche principali delle classi di raccolte specifiche di MFC come guida alla selezione. La scelta può dipendere se la classe è basata su modelli C++, se i relativi elementi possono essere serializzati mediante il meccanismo di serializzazione di documento MFC, se i relativi elementi è possibile eseguire il dump mediante il meccanismo eseguire il dump di diagnostica di MFC, o se la classe è indipendente dai tipi, ovvero se è possibile garantire il tipo di elementi archiviati in e recuperati da una raccolta basata sulla classe.
Caratteristiche delle classi collection MFC
Classe |
Utilizzare C++ modelli |
Può essere serializzato |
Può essere effettuato il dump |
Is indipendente dai tipi |
---|---|---|---|---|
CArray |
Yes |
Sì 1 |
Sì 1 |
No |
CByteArray |
No |
Yes |
Yes |
Sì 3 |
CDWordArray |
No |
Yes |
Yes |
Sì 3 |
CList |
Yes |
Sì 1 |
Sì 1 |
No |
CMap |
Yes |
Sì 1 |
Sì 1 |
No |
CMapPtrToPtr |
No |
No |
Yes |
No |
CMapPtrToWord |
No |
No |
Yes |
No |
CMapStringToOb |
No |
Yes |
Yes |
No |
CMapStringToPtr |
No |
No |
Yes |
No |
CMapStringToString |
No |
Yes |
Yes |
Sì 3 |
CMapWordToOb |
No |
Yes |
Yes |
No |
CMapWordToPtr |
No |
No |
Yes |
No |
CObArray |
No |
Yes |
Yes |
No |
CObList |
No |
Yes |
Yes |
No |
CPtrArray |
No |
No |
Yes |
No |
CPtrList |
No |
No |
Yes |
No |
CStringArray |
No |
Yes |
Yes |
Sì 3 |
CStringList |
No |
Yes |
Yes |
Sì 3 |
CTypedPtrArray |
Yes |
Dipendono 2 |
Yes |
Yes |
CTypedPtrList |
Yes |
Dipendono 2 |
Yes |
Yes |
CTypedPtrMap |
Yes |
Dipendono 2 |
Yes |
Yes |
CUIntArray |
No |
No |
Yes |
Sì 3 |
CWordArray |
No |
Yes |
Yes |
Sì 3 |
1. Per serializzare, è necessario chiamare in modo esplicito la funzione di Serialize dell'oggetto Collection; per eseguire il dump, è necessario chiamare in modo esplicito la funzione di Dump. Non è possibile utilizzare la forma ar << collObj per serializzare o il form dmp << collObj dal dump.
2. Serializability dipende dal tipo di raccolta sottostante. Ad esempio, se una matrice tipizzata di puntatore è basata su CObArray, serializzabile; se basato su CPtrArray, non serializzabile. Le classi di "stampa" non è possibile serializzare correttamente.
3. Se contrassegnato sì in questa colonna, una classe di raccolte non template è indipendente dai tipi è fornita viene utilizzata come utilizzare. Ad esempio, se si archiviano i byte in CByteArray, la matrice è indipendente dai tipi. Ma se la utilizzate per archiviare i caratteri, la relativa indipendenza dai tipi è meno determinata.
Vedere anche
Attività
Accesso a tutti i membri di una raccolta