诚信为本
量力而为
当前位置:峰汇在线 ea编程知识 正文

动态数组尺寸调整的高效实践

在编程过程中,我们常常需要改变数组的大小,特别是动态数组。在MQL4中,我们可以通过使用ArrayResize函数来达到这一目的。本文将深入探讨ArrayResize函数的应用和其高效实践。

  1. 函数概述

ArrayResize函数用于设置数组第一维度的新大小。

int ArrayResize( 
   void&  array[],              // 传递引用的数组
   int    new_size,             // 新的数组大小
   int    reserve_size=0        // 预留大小值(额外的)
   );

参数说明:

  • array[]:需要改变大小的数组。
  • new_size:第一维度的新大小。
  • reserve_size=0:可选参数。分配大小以获得预留空间。

返回值:

如果执行成功,返回调整大小后数组中所有元素的数量,否则返回-1,数组大小不变。

注意事项:

  • 此函数仅适用于动态数组。
  • 无法改变通过SetIndexBuffer()函数分配为指标缓冲的动态数组的大小。
  • 数组中元素的总数不能超过2147483647。
  • 在频繁的内存分配中,建议使用第三个参数来减少物理内存分配的次数。
  1. 实际应用示例

下面通过一个实际例子,来看看ArrayResize函数的高效应用。

void OnStart() 
{ 
    //--- 计时器
    ulong start=GetTickCount(); 
    ulong now; 
    int   count=0; 

    //--- 示范快速版本的数组
    double fastArray[]; 
    ArrayResize(fastArray,100000,100000); 

    //--- 检测有内存预留的版本的执行速度
    Print("--- 测试快速版本: ArrayResize(fastArray,100000,100000)"); 
    for(int i=1;i<=300000;i++) 
    { 
        //--- 设置新的数组大小,并指定100,000元素的预留!
        ArrayResize(fastArray,i,100000); 
        //--- 当达到一个整数时,显示数组大小和花费的时间
        if(ArraySize(fastArray)%100000==0) 
        { 
            now=GetTickCount(); 
            count++; 
            PrintFormat("%d. ArraySize(fastArray)=%d Time=%d ms",count,ArraySize(fastArray),(now-start)); 
            start=now;  
        } 
    } 

    //--- 示范慢速版本的数组
    double slowArray[]; 
    ArrayResize(slowArray,100000,100000); 
    count=0; 
    start=GetTickCount(); 
    Print("---- 测试慢速版本: ArrayResize(slowArray,100000)"); 
    for(int i=1;i<=300000;i++) 
    { 
        //--- 设置新的数组大小,但不使用额外的预留
        ArrayResize(slowArray,i); 
        //--- 当达到一个整数时,显示数组大小和花费的时间
        if(ArraySize(slowArray)%100000==0) 
        { 
            now=GetTickCount(); 
            count++; 
            PrintFormat("%d. ArraySize(slowArray)=%d Time=%d ms",count,ArraySize(slowArray),(now-start)); 
            start=now; 
        } 
    } 
}

在这个示例中,我们比较了有内存预留和无内存预留的ArrayResize函数执行效率。结果表明,采用内存预留的版本在调整数组大小时更为高效。

  1. 总结

ArrayResize函数是一个强大的工具,可以帮助我们灵活地调整动态数组的大小。通过合理地使用预留大小,我们可以显著提高程序的运行效率,优化内存使用。

版权所有转载请注明标题及链接:峰汇在线 » 动态数组尺寸调整的高效实践