如何在 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
有可能做这样的事情吗?我该怎么做?
如何在 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
有可能做这样的事情吗?我该怎么做?
你几乎已经回答了自己。二维数组可以被认为/想象为一个数组,第一个数组的每个单元格都包含一个指定大小的一维数组。类似地,可以将 3D 数组想象为在每个单元格中包含 2D 数组的 1D 数组。因此,您可以将输入参数设置为 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 对象数组并传递它。例如
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 所做的)之后,添加数组中的每个新元素以及何时函数被调用(使用成员函数'Add')。