如何在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
可以做那样的事吗?我该怎么办?
答案 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;)。