CArray CArray 提供了规则数组不具备的灵活性,但是程序可能不需要它。如果知道数组的特定限制,反而可以使用全局固定数组。如果使用 CArray,当需要重新分配时,使用 CArray::SetSize 建立它的大小并指定增长的元素数。否则,添加元素可能导致数组经常重新分配和,这样做效率很低而且可能产生内存碎片。还需注意的是,如果将一项插入数组中,则 CArray 移动内存中后面的项并且可能需要增长数组。这些操作可能导致缓存未命中和页错误。如果浏览 MFC 使用的代码,可能会明白可编写一些更特定于方案的东西以提高性能。例如,由于 CArray 是一个模板,可以提供特定类型的 CArray 专用化。 CList CList 是双向链接表,因此头、尾和表中已知位置 (POSITION) 的元素插入速度很快。按值或者索引查找需要顺序搜索,然而如果表很长则速度可能慢。如果代码不要求双向链接表,可能需要重新考虑使用 CList。使用单向链接表可省去更新所有操作的附加指针以及该指针的内存的系统开销。这种附加内存不太好,但却是解决缓存未命中或页错误的另一种可能的方法。 简单数组和列表的用法 简单的数组类 CArray 和列表类 CList 采用两个参数:TYPE 和 ARG_TYPE。这些类可以存储任何在 TYPE 参数中指定的数据类型: 基本 C++ 数据类型,如 int、char 和 float C++ 结构和类 定义的其他类型 考虑到方便性和效率,可以使用 ARG_TYPE 参数来指定函数参数的类型。通常情况下,将 ARG_TYPE 指定为对 TYPE 参数中命名类型的引用。例如: CArray<int, int> myArray; CList<CPerson, CPerson&> myList; 第一个示例声明了一个包含多个 int 的数组集合 myArray。第二个示例声明了一个存储 CPerson 对象的列表集合 myList。集合类的某些成员函数采用其类型由 ARG_TYPE 模板参数指定的参数。例如,CArray 类的 Add 成员函数采用 ARG_TYPE 参数: CArray<CPerson, CPerson&> myArray; CPerson person; myArray->Add( person );