为了处理数据的聚合,类库提供了一组集合类(数组、列表和映射),这些类可以保存各种对象和预定义类型。 集合会动态调整大小。 这些类可用于任何程序,无论是否为 Windows 编写。 但是,它们最适用于实现在应用程序框架中定义文档类的数据结构。 你可以从这些类中轻松派生专用集合类,也可以基于模板类创建它们。 有关这些方法的详细信息,请参阅 “集合”一文。 有关模板集合类的列表,请参阅 “数组、列表和映射的模板类”一文。
数组是连续存储在内存中的一维数据结构。 它们支持非常快速的随机访问,因为可以通过将元素的索引乘以元素的大小并将结果添加到数组基址来计算任何给定元素的内存地址。 但是,如果必须将元素插入到数组中,数组非常昂贵,因为插入的元素的整个数组必须移动,以便为要插入的元素腾出空间。 数组可以根据需要增长和收缩。
列表类似于数组,但存储方式非常不同。 列表中的每个元素还包括指向上一个和下一个元素的指针,使其成为一个多链接的列表。 添加或删除项非常快,因为这样做只涉及更改几个指针。 但是,搜索列表可能很昂贵,因为所有搜索都需要从列表的某个结尾开始。
映射将键值与数据值相关联。 例如,映射的键可以是字符串,数据可以是列表中的指针。 你会要求地图提供与特定字符串关联的指针。 地图查找速度很快,因为地图使用哈希表进行键查找。 添加和删除项也很快。 映射通常与其他数据结构一起使用作为辅助索引。 MFC 使用一种称为 消息映射 的特殊映射,将 Windows 消息映射到指向该消息的处理程序函数的指针。