【问题标题】:How can I populate a dynamic two dimensional array in a for loop如何在 for 循环中填充动态二维数组
【发布时间】:2021-05-25 11:42:07
【问题描述】:

这对许多人来说可能看起来微不足道,但它似乎让我变得更好,因为我无法弄清楚如何使用 ArrayResize()(我认为这是非常必要的)来解决这个问题。

在下面的代码中,当isBodytrue 时,我想填充ar[][2]。我怎样才能做到这一点。

int ar[][2];

void CheckBody()   {

   for (int i = 20; i >= 0; i--) {
   
      if (isBody) {
         int a = i + 1;
         int b = i - 3*i;
         
         // how to populate ar with [a,b] when isBody is true in this block
         
      }
   }
}

【问题讨论】:

    标签: algorithmic-trading mql5 metatrader5


    【解决方案1】:

    尝试以下代码,它被编程为作为 EA 运行,但如果在指标中使用则可以轻松修改(您必须为 isBody 变量添加代码)。

    #property strict
    
    int ar[][2];
    
    //+------------------------------------------------------------------+
    //| Initialization function of the expert                            |
    //+------------------------------------------------------------------+
    int OnInit()
    {
       ArrayInitialize(ar,NULL);
       ArrayResize(ar,1);
    return(INIT_SUCCEEDED);
    }
    //+------------------------------------------------------------------+
    //| Deinitialization function of the expert                          |
    //+------------------------------------------------------------------+
    void OnDeinit(const int reason)
    {
    
    }
    //+------------------------------------------------------------------+
    //| "Tick" event handler function                                    |
    //+------------------------------------------------------------------+
    void OnTick()
    {
       for(int i=20; i>=0; i--)
       {
          if(isBody)
          {
             if(ar[0][0]!=NULL) ArrayResize(ar,ArrayRange(ar,0)+1);
             int a=i+1;
             int b=i-3*i;
             ar[ArrayRange(ar,0)-1][0]=a; ar[ArrayRange(ar,0)-1][1]=b;
          }
       }
    }
    

    【讨论】:

    • 我尝试了代码并得到了一个编译器错误’{’ - too many initializers 指向int ar[1][2] = {NULL,NULL};,所以我将其更改为int ar[1][2] = {NULL}; 并解决了错误。运行代码后,我意识到ar 的数组大小始终为 2,无论我向数组中添加多少元素。
    • 我已经编辑了我的答案,希望它现在对你有用
    • 对不起,我有一段时间没来了。谢谢。
    • 您在上面提供的代码适用于ints,但是当我使用double 时,第一对双打给了我一些垃圾价值。对于第一对,我总是得到 4.243991582918676e-314 和 1.152034350044175e-309,这远非正确。
    • 我认为您需要将代码作为新问题发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    相关资源
    最近更新 更多