集合

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++ 模板

  • 存储在集合中的元素是否可以序列化

  • 存储在集合中的元素是否可以转储以供诊断

  • 集合是否为类型安全的

你希望做什么

常规集合类任务

基于模板的集合类任务

访问集合(基于或不基于模板)的成员

另请参阅

概念
常规 MFC 主题