在mq4中创建数组数组

时间:2014-11-17 14:57:23

标签: metatrader4

如何在mq4中创建数组数组?

我有这个参数的函数:

double & v1[], double & v2[], double & v3[], double & v4[]

我想创建一个数组,其中每个位置都引用另一个数组,如:

double v[];

v[0] = v1;
v[1] = v2;
v[2] = v3;
v[3] = v4;

然后迭代:

v[0][2] == v1[2]; // true

可以做那样的事吗?我该怎么办?

1 个答案:

答案 0 :(得分:0)

你已经几乎已经回答过了。可以将2D阵列视为/想象为阵列,其中第一阵列的每个单元包含指定大小的1D阵列。类似地,可以将3D阵列想象为在每个单元中包含2D阵列的一维阵列。因此,您可以将输入参数设置为double& v [4] [6]并循环遍历它们,而不是传入v1,v2,v3,v4。

TestFunction(double &v[4][6]) 
{
    for(int i=0;i<4;i++)
    {
       for(int j=0;j<6;j++)
       {
          v[i][j] = 0; 
       }
    }
}

如果示例中的数组v1,v2,v3,v4的大小不同,那么您可以创建一个CArrayDouble对象数组并传递它。 E.g。

CArrayDouble TestArray2[4]

void TestFunction2(CArrayDouble &v[4])
{
   for(int i=0;i<4;i++)
   {
      for(int j=0;j<v[i].Total();j++)
      {
         v[i][j];
      }   
   }
}

如果您无法更改功能签名,请回答您的评论。您可以将数组复制到CArrayDouble的实例中。

CArrayDouble ArrayOfArray[4];
ArrayOfArray[0].AssignArray(v1);
ArrayOfArray[1].AssignArray(v2);
ArrayOfArray[2].AssignArray(v3);
ArrayOfArray[3].AssignArray(v4);

如果数组v1,v2等是缓冲区并因此在每个新柱上改变大小,我会将CArrayDouble声明为静态,并在初始复制之后(这是AssignArray所做的),将数组中的每个新元素添加为并在调用该函数时(使用成员函数&#39;添加&#39;)。