Clist CArray

来源:互联网 发布:腾讯云域名与ip绑定 编辑:程序博客网 时间:2024/06/06 05:55


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   );  


0 0