ArrayRemove
ArrayRemove
从指定索引开始移除数组中指定的元素数量。
bool ArrayRemove(
void& array[], // 任何类型的数组
uint start, // 开始移除的索引
uint count=WHOLE_ARRAY // 元素数量
);参数
- array[]
[in][out] 数组。
- start
[in] 索引,数组元素从这里开始移除。
- count=WHOLE_ARRAY
[in] 移除元素的数量。WHOLE_ARRAY值表示移除从指定索引到数组结束的所有元素。
返回值
如果成功返回true,否则返回false。若要获得错误信息,请调用GetLastError()函数。可能错误:
- 5052 ERR_SMALL_ARRAY(start值过大),
- 5056 ERR_SERIES_ARRAY(该数组不能更改,指标缓冲区),
- 4003 ERR_INVALID_PARAMETER(count值过大),
- 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS(包含具有析构函数的复杂对象的固定大小数组),
- 4006 - ERR_INVALID_ARRAY (包含具有析构函数的结构或类对象的固定大小数组)。
注意
如果函数用于固定大小的数组,该数组大小不变:剩余的"tail"物理复制到start位置。对于准确理解函数如何工作,请参阅以下示例。“Physical(物理)“复制表示复制的对象不是通过调用构造函数或复制操作符创建的。而是复制对象的二进制表示法。为此,您不可以将ArrayRemove()函数应用于包含析构函数对象的固定大小数组 (激活ERR_INVALID_ARRAY或ERR_STRUCT_WITHOBJECTS_ORCLASS错误)。当在移除这种对象时,应该调用两次析构函数 针对原始对象及其副本。
您不能从由SetIndexBuffer()函数指定为指标缓冲区的动态数组移除元素。这会导致ERR_SERIES_ARRAY错误。对于指标缓冲区,所有更改大小的操作都通过程序端的执行子系统来完成。
例如:
//+------------------------------------------------------------------+
//| 脚本程序起始函数 |
//+------------------------------------------------------------------+
void OnStart()
{
//--- 声明固定大小数组并填充值
int array[10];
for(int i=0;i<10;i++)
{
array[i]=i;
}
//--- 在移除元素之前显示数组
Print("Before calling ArrayRemove()");
ArrayPrint(array);
//--- 从数组中删除2个元素并显示新集合
ArrayRemove(array,4,2);
Print("After calling ArrayRemove()");
ArrayPrint(array);
/*
执行结果:
Before calling ArrayRemove()
0 1 2 3 4 5 6 7 8 9
After calling ArrayRemove()
0 1 2 3 6 7 8 9 8 9
*/