CArrayObj
CArrayObj
CArrayObj 类是存储 CObject 及其继承类的实例指针的变量动态数组。
描述
类 CArrayObj 可供操作 CObject 及其继承类的实例指针的变量动态数组。它为操纵那些原初数据类型和较难组织的数据结构的多维动态数组提供了可能。
类中实现了在数组里添加 / 插入 / 删除元素的能力, 数组排序, 在排序的数组里搜索。. 此外, 还实现了文件操作方法。
还有某些 CArrayObj 的 细微之处 。
声明
class CArrayObj : public CArray标称库文件
#include <Arrays\ArrayObj.mqh>继承体系
CArrayObj
直接分支
类方法
| 属性 | |
|---|---|
| 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:
- 内存管理机制启用。(省缺)
此种情况, 当元素从数组删除后 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;- 内存管理机制关闭。
此种情况, 当元素从数组删除后 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;