Condividi tramite


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

Concetti

Raccolte

Classi basate su modello

Procedura: creazione di una raccolta indipendente dai tipi