错误、漏洞、问题 - 页 465

 
uncleVic:
也请给裁谈会写信说明此事。就像 "不是所有评论中的东西都可以在测试器中选择"。
不,没有退路。我打开了两个终端--Alpari,和MK,来回切换,但在后者中,我忘了将欧元兑英镑加入市场概览。
 
marketeer:
不,是反弹。我打开了两个终端--Alpari,和MK,来回切换,但在后者中,我忘了将欧元兑英镑加入市场概览。
它发生了。
 

我试图在脚本中创建一个数组,其行为就像一个指标系列。也就是说,当一个新条目出现时,整个数组被后移,新条目被打到一个空位置。

void OnStart()
  {
   int a[];
   int size=5;               // размер массива
   bool flag=true;           // флаг направления индексации
   ArraySetAsSeries(a,flag);  // зададим направление индексации
   ArrayResize(a,size);      // зададим размер массива
//---
   for(int i=0;i<size;i++)  // задаём значения и распечатываем массив
      a[i]=size-i;         // 54321
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
//---
   ArrayResize(a,size-1);     // уменьшаем размер 5432
   ArraySetAsSeries(a,!flag);  // меняем направление индексации 2345
   ArrayResize(a,size);       // возвращаем в исходный размер  2345х
   ArraySetAsSeries(a,flag);   // возвращаем в исходную индексацию х5432   
   a[0]=6;                   // задаём "пустому" нулевому данному значение
//---
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
   // в результате получаем 64321 вместо нужного 65432
  }

正如他们所说,为什么?

也许我搞错了,但这是我想到的第一件事--语言优化中的另一个错误。

HZZY我也请那些想用循环来转移数据的朋友不要费心了。 这对5...100...1000...的数组很好用,但对更大的数组 就不行了。

 
Urain:

我试图在脚本中创建一个数组,其行为就像一个指标系列。也就是说,当一个新条目出现时,整个数组被后移,新条目被打到一个空位置。

正如他们所说,为什么?


如果我们采取CArrayInt 类,并使用插入法将数据塞入其中,会怎么样?
 
uncleVic:
如果我们采用CArrayInt类,并在其中插入数据?

我希望能够通过参数传递数组,而数组本身在类中是私有的。

同样,在我的记忆中,这种方法是在循环中从事数据的转移,而且速度相当慢。

 
Urain:

我试图在脚本中创建一个数组,其行为就像一个指标系列。也就是说,当一个新条目出现时,整个数组被后移,新条目被打到一个空位置。

正如他们所说,为什么?

也许我搞错了,但这是我想到的第一件事--语言优化中的另一个错误。

HZZY我也请那些想用循环来转移数据的朋友不要费心了。 这对5...100...1000...的数组很好用,但对更大的数组就不行了。


关于 "ZZZY "的问题:你的调整尺寸不会磨损你的记忆吗?
 
uncleVic:
至于 "ZZI":你的大小调整不会给你带来内存碎片?

我不知道mql5中还有什么其他函数(分配内存)。

HH而据我理解,阵列的方向也是纯粹的虚拟的东西。

ZZY 显然,你要做的不是内存,而是地址空间的虚拟化。而且这也拖慢了工作进度,毕竟直接访问更快。

 
Urain:

我希望能够通过参数传递数组,而数组本身在类中是私有的。

同样,在我的记忆中,这种方法只是为了在一个循环中转移数据,这是很慢的。

我得考虑改进阵列类(对我来说)。
 
uncleVic:
我将不得不考虑改进阵列类(对我来说)。

是的,在零位上的虚拟插入将是很好的。但不是为了真正地移动数据,否则就会很长,效率很低。

总之,不能直接用内存工作是很糟糕的,它有很好的虚拟化加速功能,如果你用单元地址而不是数组寻址,甚至C++的速度也要快1.5倍。

 
Urain:

我试图在脚本中创建一个数组,其行为就像一个指标系列。也就是说,当一个新条目出现时,整个数组被后移,新条目位于零的位置。

ZZZY我请那些想建议按周期移动数据的同志不要担心,这个选项对5...100...1000...的数组很有效,但在更大的数组中是不能接受的。


但我可以建议不要移动整个阵列吗?:)

动态数组,新数据被写入末端,大小被改变/记忆,AsSeries标志只改变索引。

对于正常的顺序,它是数组的N个元素,对于 "串行 "的大小-N-1。

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5