Recommendations for Choosing a Collection 類別
這份文件包含設計用來幫助您選擇針對特定應用程式需求的集合類別的詳細的資訊。
您所選擇的集合類別,取決於許多因素,包括:
[類別] 圖形的功能: 順序]、 [索引化,及 [效能] 中所示集合形狀功能本主題稍後的表格
該類別是否使用 C++ 樣板
儲存在集合中的項目可以變更進行序列化
是否儲存在集合中的項目可以是診斷傾印
這個集合是否是型別安全
下表中, 集合形狀功能,摘要列出可用的集合形狀的特性。
2 和第三欄描述每個圖形的順序,以及存取特徵。 在表格中,已排序 」 一詞指的項目會插入與刪除的順序會決定在集合中,否則它們的順序 它並不表示它們的內容上排序的項目。 這個詞彙 「 索引 」,表示整數索引,就像一般陣列裡的項目一樣可擷取集合中的項目。
資料行 4 和 5 將說明每種形狀的效能。 需要很多插入至集合的應用程式,插入速度可能會顯得特別重要。 對於其他應用程式,查閱的速度會更重要的。
第六欄描述了每個圖案是否允許重複的項目。
集合形狀功能
圖案 |
呢? |
建立索引吗? |
插入項目 |
搜尋指定項目 |
重複的項目嗎? |
---|---|---|---|---|---|
List |
是 |
否 |
快轉 |
緩慢 |
是 |
陣列 |
是 |
以 int |
緩慢 |
緩慢 |
是 |
對應 |
否 |
依據索引鍵 |
快轉 |
快轉 |
無 (索引鍵) [是] (值) |
下表中, MFC 集合類別特性,摘要說明特定的 MFC 集合類別的其他重要特性,作為輔助線,來選取項目。 您的選擇取決於該類別根據 C++ 樣板是否可以透過 MFC 的文件序列化它的項目序列化機制、 是否可以透過 MFC 的診斷傾印機制,傾其項目或類別是否被安全型別 — 也就是是否能保證元素的型別中儲存和擷取集合,依據類別中。
MFC 集合類別的特性
類別 |
使用 C++ 樣板 |
可以是 已序列化 |
可以是 傾印 |
Is 型別安全 |
---|---|---|---|---|
CArray |
是 |
是 1 |
是 1 |
否 |
CByteArray |
否 |
是 |
是 |
是 3 |
CDWordArray |
否 |
是 |
是 |
是 3 |
CList |
是 |
是 1 |
是 1 |
否 |
CMap |
是 |
是 1 |
是 1 |
否 |
CMapPtrToPtr |
否 |
否 |
是 |
否 |
CMapPtrToWord |
否 |
否 |
是 |
否 |
CMapStringToOb |
否 |
是 |
是 |
否 |
CMapStringToPtr |
否 |
否 |
是 |
否 |
CMapStringToString |
否 |
是 |
是 |
是 3 |
CMapWordToOb |
否 |
是 |
是 |
否 |
CMapWordToPtr |
否 |
否 |
是 |
否 |
CObArray |
否 |
是 |
是 |
否 |
CObList |
否 |
是 |
是 |
否 |
CPtrArray |
否 |
否 |
是 |
否 |
CPtrList |
否 |
否 |
是 |
否 |
CStringArray |
否 |
是 |
是 |
是 3 |
CStringList |
否 |
是 |
是 |
是 3 |
CTypedPtrArray |
是 |
取決於 2 |
是 |
是 |
CTypedPtrList |
是 |
取決於 2 |
是 |
是 |
CTypedPtrMap |
是 |
取決於 2 |
是 |
是 |
CUIntArray |
否 |
否 |
是 |
是 3 |
CWordArray |
否 |
是 |
是 |
是 3 |
1. 若要將序列化,您必須明確地呼叫集合物件的Serialize運作 ; 若要傾印,您必須明確地呼叫其Dump函式。 您不能使用表單ar << collObj來序列化或表單dmp<< collObj來傾印。
2. 序列化能力取決於基礎集合型別。 比方說,如果型別的指標陣列根據CObArray,它是可序列化。 如果根據CPtrArray,不是可序列化。 一般情況下,「 Ptr 」 類別無法序列化。
3. 如果標記為 [是],在本專欄中,非樣板集合類別會是型別安全,前提是您使用如預期般。 比方說,如果您將儲存在位元組CByteArray,陣列會被安全型別。 但是,如果您可以用它來儲存字元,其型別安全是較不能保證。