集合
Microsoft 基础类库提供了用来管理对象的组的集合类。 这些类有两种类型:
注意
如果代码已使用非模板集合类,你可以继续使用它们。 如果您为自己的数据类型编写了新的类型安全集合类,则建议使用较新的基于模板的类。
集合形式
集合类以其“形式”和元素类型为特征。 形式指的是集合组织和存储对象的方式。 MFC 提供了三个基本集合形式:列表、数组和映射(也称为字典)。 你可以选取最适合你的特定编程问题的集合形式。
本主题的后面部分简要分别介绍了所提供的三种集合形式。 若要比较各个形式的功能,以帮助确定哪个形式最适合你的程序,请参阅针对选择集合类提出的建议。
列表
列表类提供了元素的有序非索引列表,该列表作为双向链接列表实现。 列表具有“头”和“尾”,它在头和尾中添加/移除元素或在中间插入/删除元素非常快。
Array
数组类提供了一个以动态方式调整大小、经过排序且编制了整数索引的对象数组。
映射(也称为字典)
映射是将键对象与值对象关联的集合。
基于模板的集合类
若要实现包含任何类型的对象的类型安全的集合,最简单的方法是使用其中一个基于 MFC 模板的类。 有关这些类的示例,请参阅 MFC 示例 COLLECT。
下表列出了基于 MFC 模板的集合类。
集合模板类
集合内容 | 数组 | 列表 | Maps |
---|---|---|---|
任何类型的对象的集合 | CArray |
CList |
CMap |
指向任何类型的对象的指针的集合 | CTypedPtrArray |
CTypedPtrList |
CTypedPtrMap |
不基于模板的集合类
如果应用程序已使用 MFC 非模板类,则可以继续使用它们。 但是,对于新集合,建议使用基于模板的类。 下表列出了不基于模板的 MFC 集合类。
非模板集合类
数组 | 列表 | Maps |
---|---|---|
CObArray |
CObList |
CMapPtrToWord |
CByteArray |
CPtrList |
CMapPtrToPtr |
CDWordArray |
CStringList |
CMapStringToOb |
CPtrArray |
CMapStringToPtr |
|
CStringArray |
CMapStringToString |
|
CWordArray |
CMapWordToOb |
|
CUIntArray |
CMapWordToPtr |
针对选择集合类提出的建议中的“MFC 集合类的特征”表基于这些特征(而不是形式)介绍了 MFC 集合类:
类是否使用 C++ 模板
存储在集合中的元素是否可以序列化
存储在集合中的元素是否可以转储以供诊断
集合是否为类型安全的