清除一个定义元素的数组 - 页 17

 
Алексей Тарабанов:

不要取笑别人

甚至没有开始;-)

当有一个基准时,我甚至没有提到 "检查和"。

人们可以记住渐近论,通过渐近论最终估计出速度。
而这取决于输入的数据量、要删除的元素数量和它们的位置/分布(在现实中永远是均匀的)。

并认为可以/应该绘制图表。

目标当然不值得如此努力,但无论如何都要遵循这个方法。

我还可以继续写两三页 :-)

 

增加了旋转、暂停和热身选项(第一遍不计入)。

附加的文件:
 
Stanislav Dray:

我增加了一个带有旋转、停顿和热身的变体(第一遍不考虑)。

很奇怪的是,许多例子不能正常使用结构...也许我不明白什么......

 
Vladimir Pastushak:

很奇怪的是,许多例子不能正常使用结构...也许我不明白什么......

摆脱结构的束缚,改用类的形式。他们在MQL中更容易工作。

 
Vladimir Pastushak:

很奇怪的是,许多例子不能正常使用结构...也许我不明白...

你是什么意思?我不知道你是什么意思。什么例子不对? 一切都对。

1

 
Vladimir Pastushak:

很奇怪的是,许多例子不能正常使用结构...也许我不明白什么......

这些函数不知道应该比较结构中的哪个字段。

 
Dmitry Fedoseev:

该函数不知道要比较的是结构的哪个字段。

该功能是按字段进行比较的。其结果是由于某种原因删除了数组中的最后一个元素。

 
想通了,是字符串中的字段移动,而不是整个结构......。
 
Nikolai Semko:

研究代码。

检查了你的代码。你做的一切都是对的。

我只是不明白为什么那条线占据了我大部分的时间。

//+------------------------------------------------------------------+
int PeterArray(int &Arr[],const int val) // вариант Peter Konow
  {
   int deleted=0,q=0;
   for(int a1=0; a1<ArraySize(Arr); a1++)
     {
      if(deleted)Arr[q]=Arr[q+deleted];
      if(Arr[q]==val){deleted++; q--;} <-----------Выполнение этих операций занимает кучу времени.
      q++;
     }
   ArrayResize(Arr,q);
   return (q);
  }
//+------------------------------------------------------------------+

如果没有这一行,代码的运行时间为2微秒。但没有它,你就无法做到这一点。

这可能不是最快的解决方案,但却是最简洁的解决方案之一。


SZY.你在写函数时犯了一个错误,由我解决。

我的功能不是

ArrayResize(Arr,q);

а

ArrayResize(Arr,ArraySize(Arr) - deleted);

但还是要谢谢你。

 
Vladimir Pastushak:

该函数正在对字段进行比较。其结果是,由于某种原因,数组中的最后一个元素被删除。

当把一个元素分配给另一个元素时,即使用"="号时?

我注意到,最好是自己动手抄写。你不能依赖任何东西。