清除一个定义元素的数组 - 页 18 1...111213141516171819202122232425...30 新评论 Konstantin Nikitin 2018.11.16 11:52 #171 Vladimir Pastushak: 我想明白了,是结构中的场转移,而不是整个结构......如果该结构是一个简单的类型,它应该可以工作。 Реter Konow 2018.11.16 11:59 #172 另一个细微差别。我已经证明了我的算法是正确工作的。我打印出了函数执行后得到的数值。其他算法的工作效果如何是个谜。 不过校验和似乎证明是正确的。 Nikolai Semko 2018.11.16 12:01 #173 Реter Konow:ZS,不过你在按照我的方案写函数时确实犯了一个错误。 我的功能不是 а 但还是要谢谢你。 不,我没有犯错,我纠正了你的错误。好好想想,你的线路是做什么的? 只要试着改变它,你就会明白。它将是错误的校验和和错误的大小。 Stanislav Dray 2018.11.16 12:09 #174 Реter Konow: ZS,不过你在按照我的方案写函数时确实犯了一个错误。 我的功能不是 а 在你的代码中,它与 Реter Konow 2018.11.16 12:09 #175 Nikolai Semko: 不,我没有犯错,我纠正了你的错误。好好想想,你的生产线是做什么的?它不做任何事情。 只要试着改变它,你就会发现。它将是错误的校验和和错误的大小。其结果是完全一样的。没有错误。 是的,它没有做任何事情。但有了它就更有意义了。)) Реter Konow 2018.11.16 12:10 #176 Stanislav Dray:在你的代码中,它等同于是的。 Nikolai Semko 2018.11.16 12:22 #177 Реter Konow:是的。哦,是的,对不起。 我想起来了。 你的代码取自这里。 你的那句话不在那里,我记得那句话我必须加上去才能正常工作。 标签 Konow:但有了它就更有意义了。)) 这里面有一个额外的数学运算。 )) Реter Konow 2018.11.16 12:23 #178 问题。为什么在这段代码中,在改变了数组的大小 后,它的打印结果仍然与改变前一样?//+------------------------------------------------------------------+ //| Erase and Resize.mq5 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" //-------------------------------------------------------------------- //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int Arr[20] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2}; ulong q1 = GetMicrosecondCount(); //-------------------------------- PeterArray(Arr,3); //-------------------------------- ulong q2 = GetMicrosecondCount(); //-------------------------------- Print("Array new size ",ArraySize(Arr)," Тime of operation ",q2-q1); ArrayPrint(Arr); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int PeterArray(int &Arr[],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,ArraySize(Arr) - deleted); return (q); } //+------------------------------------------------------------------+这让人对校验和检查算法的有效性产生怀疑。所以,当我们计算校验和时,我们在数组中做一个循环,仍然保留其之前的元素?我建议以我的方式检查算法。通过输出一个包含20个值的数组。 这将是对正确性的检查,而不是速度。 Nikolai Semko 2018.11.16 12:31 #179 Реter Konow:问题。为什么在这段代码中,在改变了数组的大小后,它的打印结果仍然与改变前一样? 这使人们对校验和检查算法的有效性产生怀疑。所以,当我们计算校验和时,我们在数组中做一个循环,仍然保留其之前的元素? 我建议以我的方式检查算法。通过输出一个包含20个值的数组。 这将是对正确性的测试,而不是速度。 我建议是一百万,因为测试中有一百万。让大家坐下来比较一下。))。 Реter Konow 2018.11.16 12:41 #180 Nikolai Semko: 我建议是一百万,因为有一百万在测试。让大家坐下来比较一下))。校验和计算不正确。 自己检查一下吧。它计算保留在数组删除部分的元素。 //+------------------------------------------------------------------+ //| Erase and Resize.mq5 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" //-------------------------------------------------------------------- //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { int Arr[20] = {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2}; ulong q1 = GetMicrosecondCount(); //-------------------------------- PeterArray(Arr,3); //-------------------------------- ulong q2 = GetMicrosecondCount(); //-------------------------------- Print("Array new size ",ArraySize(Arr)," Тime of operation ",q2-q1," Контрольная сумма: ",ControlSumm(Arr)); ArrayPrint(Arr); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int PeterArray(int &Arr[],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,ArraySize(Arr) - deleted); return (q); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ long ControlSumm(int &a[]) // суммирование всех элементов массива (контрольная сумма) { long sum=0; for(int i=0; i<ArraySize(a); i++) sum+=a[i]; return sum; } //+------------------------------------------------------------------+ 当然,这还不能证明检查是错误的,但已经有了一些疑问。 校验和是由该行的元素计算出来的。 2018.11.16 14:36:28.456 Erase and Resize (USDJPY,H1) 1 2 1 2 1 2 1 2 1 2 1 2 1 2 3 1 2 3 1 2 而最后的6个元素之前已经被ArrayResize 删除。 但无论如何,该函数仍然计算它们。 1...111213141516171819202122232425...30 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我想明白了,是结构中的场转移,而不是整个结构......
如果该结构是一个简单的类型,它应该可以工作。
另一个细微差别。我已经证明了我的算法是正确工作的。我打印出了函数执行后得到的数值。其他算法的工作效果如何是个谜。
不过校验和似乎证明是正确的。
ZS,不过你在按照我的方案写函数时确实犯了一个错误。
我的功能不是
а
但还是要谢谢你。
ZS,不过你在按照我的方案写函数时确实犯了一个错误。
我的功能不是
а
在你的代码中,它与
不,我没有犯错,我纠正了你的错误。好好想想,你的生产线是做什么的?它不做任何事情。 只要试着改变它,你就会发现。它将是错误的校验和和错误的大小。
其结果是完全一样的。没有错误。
是的,它没有做任何事情。但有了它就更有意义了。))
在你的代码中,它等同于
是的。
是的。
哦,是的,对不起。
我想起来了。
你的代码取自这里。
你的那句话不在那里,我记得那句话我必须加上去才能正常工作。
但有了它就更有意义了。))
这里面有一个额外的数学运算。 ))
问题。为什么在这段代码中,在改变了数组的大小 后,它的打印结果仍然与改变前一样?
这让人对校验和检查算法的有效性产生怀疑。所以,当我们计算校验和时,我们在数组中做一个循环,仍然保留其之前的元素?
我建议以我的方式检查算法。通过输出一个包含20个值的数组。
这将是对正确性的检查,而不是速度。问题。为什么在这段代码中,在改变了数组的大小后,它的打印结果仍然与改变前一样?
这使人们对校验和检查算法的有效性产生怀疑。所以,当我们计算校验和时,我们在数组中做一个循环,仍然保留其之前的元素?
我建议以我的方式检查算法。通过输出一个包含20个值的数组。
这将是对正确性的测试,而不是速度。我建议是一百万,因为有一百万在测试。让大家坐下来比较一下))。
校验和计算不正确。
自己检查一下吧。它计算保留在数组删除部分的元素。
当然,这还不能证明检查是错误的,但已经有了一些疑问。
校验和是由该行的元素计算出来的。
而最后的6个元素之前已经被ArrayResize 删除。
但无论如何,该函数仍然计算它们。