关于选择集合类的建议
本文包含设计的详细信息有助于您选择特定应用程序所需的集合类。
集合类的选择取决于多种因素,包括:
类形状的功能:顺序、索引和性能,如 集合形态功能 本主题后面的表所示。
类是使用 C++ 模板
在集合中的元素是可序列化
集合中存储的元素是否可以为诊断转储
集合是否是类型安全
下表概括了可用,集合形态功能,集合形态的特性。
列 2 和列 3 顺序描述每个形状的和访问特性。 在表中,“排序”结尾意味着项插入和 Delete 的顺序决定它们在集合的顺序;不意味着项对其内容进行排序。 “索引”结尾表示集合中的项可以由整数索引检索,类似于典型数组的项。
列 4 和列 5 描述每个形状的性能。 在需要插入到许多集合的应用程序速度可能,插入尤其重要;对于其他应用程序,查看速度可能是更重要。
第 6 列描述每个形状是否允许元素复制。
集合形态功能
形状 |
ordered |
索引的 |
插入元素 |
指定的元素的搜索 |
重复元素 |
---|---|---|---|---|---|
List |
是 |
否 |
Fast |
速度 |
是 |
数组 |
是 |
int |
速度 |
速度 |
是 |
映射 |
否 |
通过键 |
Fast |
Fast |
非 (键) 是 (值) |
下表汇总,MFC 集合类的特性,特定 MFC 集合类中所有其他重要方面为选择的指南。 选择可能依赖类是否基于 C++ 模板,其元素都可以通过 序列化 MFC 文档序列化机制,其元素都可以通过 MFC 的诊断转储的机制转储,或者类是否是类型安全 -,可以保证类型存储在元素,并从集合检索基于类。
MFC 集合类的特性
类 |
使用 C++。 模板 |
可以为 。 已序列化 |
可以为 。 转储 |
Is Type-Safe — 类型安全 |
---|---|---|---|---|
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. Serializability 取决于基础集合类型。 例如,如果,一个类型化指针数组基于 CObArray,则序列化;如果基于 CPtrArray,则不序列化。 通常,“Ptr”类无法进行序列化。
3. 如果是用于标记此列,是类型安全提供了非模板集合类使用它遵循计划。 例如,在中,如果您在 CByteArray中存储字节,数组是类型安全的。 但是,如果您在使用它存储字符,其类型安全性最不确定。