跳至内容

CArrayObj

CArrayObj

CArrayObj 类是存储 CObject 及其继承类的实例指针的变量动态数组。

描述

类 CArrayObj 可供操作 CObject 及其继承类的实例指针的变量动态数组。它为操纵那些原初数据类型和较难组织的数据结构的多维动态数组提供了可能。

类中实现了在数组里添加 / 插入 / 删除元素的能力, 数组排序, 在排序的数组里搜索。. 此外, 还实现了文件操作方法。

还有某些 CArrayObj 的 细微之处

声明

class CArrayObj : public CArray

标称库文件

#include <Arrays\ArrayObj.mqh>

继承体系

CObject

CArray

CArrayObj

直接分支

: CIndicators, CSeries

类方法

属性
FreeMode获取内存管理标志
FreeMode设置内存管理标志
内存控制
Reserve分配内存增加数组大小
调整大小设置数组新大小 (更小)
Shutdown清除数组并完全释放内存数组 (非元素)。
添加方法
添加在数组末尾添加元素
AddArray在数组末尾添加元素
Insert在数组中按指定位置插入元素
InsertArray在数组中按指定位置插入另一个数组的元素
AssignArray从另一个数组里拷贝元素至本数组
更新方法
Update在指定数组位置修改元素
平移在数组里从给定位置移动一个元素至另一个指定偏移。
删除方法
Detach从数组指定位置获取元素, 并将其删除。
删除从数组的指定位置删除元素
DeleteRange从数组的指定位置删除一组元素
Clear删除数组内所有元素而无需释放内存数组
访问方法
At获取数组指定位置的元素
比较方法
CompareArray比较数组与另一个数组
数组排序操作
InsertSort在排序数组里插入元素
搜索在排序数组里搜索与模型相等的元素
SearchGreat在排序数组里搜索更多与样本相等的元素
SearchLess在排序数组里搜索小于样本的元素
SearchGreatOrEqual在排序数组里搜索大于或等于模型的元素
SearchLessOrEqual在排序数组里搜索小于或等于模型的元素
SearchFirst在排序数组里搜索首个与模型相等的元素
SearchLast在排序数组里搜索最后一个与模型相等的元素
输入/输出
Save保存数组数据至文件
Load从文件里加载数组数据。
Type获取数组类型标识符

方法继承自类 CArray

: Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

数组的实际应用是 CObject 类的子类 (包括标准库里的所有类)。

例如, 考虑二维数组作为选项:

#include <Arrays\ArrayDouble.mqh>
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   int i,j;
   int first_size=10;
   int second_size=100;
//--- 创建数组
   CArrayObj    *array=new CArrayObj;
   CArrayDouble *sub_array;
//---
   if(array==NULL)
     {
      printf("对象创建错误");
      return;
     }
//--- 创建子数组
   for(i=0;i<first_size;i++)
     {
      sub_array=new CArrayDouble;
      if(sub_array==NULL)
        {
         delete array;
         printf("对象创建错误");
         return;
        }
      //--- 填充数组
      for(j=0;j<second_size;j++)
        {
         sub_array.Add(i*j);
        }
      array.Add(sub_array);
     }
//--- 创建数组成功
   for(i=0;i<first_size;i++)
     {
      sub_array=array.At(i);
      for(j=0;j<second_size;j++)
        {
         double element=sub_array.At(j);
         //--- 使用数组元素
        }
     }
   delete array;
  }

细节

这个类具有控制动态内存机制,所以操作数组中的元素时要小心。

内存管理机制可以使用方法 FreeMode (bool) 切换。省缺时, 机制启用。

因此, 有两种选择来处理类 CArrayObj:

  1. 内存管理机制启用。(省缺)

此种情况, 当元素从数组删除后 CArrayObj 负责释放其占用内存。在此程序里, 用户不应释放数组元素。

例如:

int i;
//--- 创建数组
   CArrayObj *array=new CArrayObj;
//--- 填充数组元素
   for(i=0;i<10;i++) array.Add(new CObject);
//--- 做点什么
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- 利用元素的动作
      . . .
     }
//--- 删除数组元素
   delete array;
  1. 内存管理机制关闭。

此种情况, 当元素从数组删除后 CArrayObj 不负责释放其占用内存。在此程序里, 用户必须释放数组元素。

例如:

int i;
//--- 创建数组
   CArrayObj *array=new CArrayObj;
//--- 禁用内存管理机制
   array.FreeMode(false);
//--- 填充数组元素
   for(i=0;i<10;i++) array.Add(new CObject);
//--- 做点什么
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- 利用元素的动作
      . . .
     }
//--- 删除数组元素
   while(array.Total()) delete array.Detach();
//--- 删除空数组
   delete array;