算法、解决方法、其性能的比较 - 页 18 1...11121314151617181920212223 新评论 Vasiliy Sokolov 2017.12.11 10:53 #171 Реter Konow: 为什么对某一问题的完美解决方案被认为是嘲弄?说真的,我不明白...你的任务是什么?请在这里公开提醒你自己。 Alexandr Andreev 2017.12.11 10:54 #172 Vasiliy Sokolov:你写了一些胡言乱语。本质上是通过索引访问数组 的一个变种。在现实中,交易数字是随机的,当你需要解决实际问题时,你的整个例子就会崩溃。等到你做好了,我相信明天就可以了。 Vladimir Karputov 2017.12.11 10:54 #173 Реter Konow:***如果我想确保当数组的大小改变时,数据不会从数组中消失,***下面是对动态数组 的检查: 一维的arr_dynamic 和二维的arr_dynamic_multi。//+------------------------------------------------------------------+ //| ArrayResize.mq5 | //| Copyright © 2017, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.001" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- объявим динамические массивы double arr_dynamic[]; double arr_dynamic_multi[][2]; //--- новый размер в первом измерении массива if(ArrayResize(arr_dynamic,5)==-1) { Print("Ошибка ArrayResize for \"arr_dynamic\""); return; } if(ArrayResize(arr_dynamic_multi,5)==-1) { Print("Ошибка ArrayResize for \"arr_dynamic_multi\""); return; } for(int i=0;i<ArraySize(arr_dynamic);i++) arr_dynamic[i]=i; for(int i=0;i<ArrayRange(arr_dynamic_multi,0);i++) { arr_dynamic_multi[i][0]=i; arr_dynamic_multi[i][1]=i*10; } //--- распечатка значений до увеличения размера Print("Перед ArrayResize массив \"arr_dynamic\" имеет такие элементы:"); ArrayPrint(arr_dynamic); Print("Перед ArrayResize массив \"arr_dynamic_multi\" имеет такие элементы:"); ArrayPrint(arr_dynamic_multi); //--- увеличим размер на два элемента if(ArrayResize(arr_dynamic,ArraySize(arr_dynamic)+2)==-1) { Print("Ошибка ArrayResize for \"arr_dynamic\""); return; } if(ArrayResize(arr_dynamic_multi,ArrayRange(arr_dynamic_multi,0)+2)==-1) { Print("Ошибка ArrayResize for \"arr_dynamic_multi\""); return; } //--- распечатка значений после увеличения размера Print("После ArrayResize (увеличения размера) массив \"arr_dynamic\" имеет такие элементы:"); ArrayPrint(arr_dynamic); Print("После ArrayResize (увеличения размера) массив \"arr_dynamic_multi\" имеет такие элементы:"); ArrayPrint(arr_dynamic_multi); //--- новый размер в первом измерении массива установим равным 3 (то есть уменьшим размер массива) if(ArrayResize(arr_dynamic,3)==-1) { Print("Ошибка ArrayResize for \"arr_dynamic\""); return; } if(ArrayResize(arr_dynamic_multi,3)==-1) { Print("Ошибка ArrayResize for \"arr_dynamic_multi\""); return; } //--- распечатка значений после уменьшение размера Print("После ArrayResize (уменьшение размера) массив \"arr_dynamic\" имеет такие элементы:"); ArrayPrint(arr_dynamic); Print("После ArrayResize (уменьшение размера) массив \"arr_dynamic_multi\" имеет такие элементы:"); ArrayPrint(arr_dynamic_multi); } //+------------------------------------------------------------------+ 正如你所看到的,当数组的大小增加 时,以前的值仍然存在。Перед ArrayResize массив "arr_dynamic" имеет такие элементы: 0.00000 1.00000 2.00000 3.00000 4.00000 Перед ArrayResize массив "arr_dynamic_multi" имеет такие элементы: [,0] [,1] [0,] 0.00000 0.00000 [1,] 1.00000 10.00000 [2,] 2.00000 20.00000 [3,] 3.00000 30.00000 [4,] 4.00000 40.00000 После ArrayResize (увеличения размера) массив "arr_dynamic" имеет такие элементы: 0.00000 1.00000 2.00000 3.00000 4.00000 -0.00000 +0.00000 После ArrayResize (увеличения размера) массив "arr_dynamic_multi" имеет такие элементы: [,0] [,1] [0,] 0.00000 0.00000 [1,] 1.00000 10.00000 [2,] 2.00000 20.00000 [3,] 3.00000 30.00000 [4,] 4.00000 40.00000 [5,] +0.00000 +0.00000 [6,] +0.00000 +0.00000 После ArrayResize (уменьшение размера) массив "arr_dynamic" имеет такие элементы: 0.00000 1.00000 2.00000 После ArrayResize (уменьшение размера) массив "arr_dynamic_multi" имеет такие элементы: [,0] [,1] [0,] 0.00000 0.00000 [1,] 1.00000 10.00000 [2,] 2.00000 20.00000 附加的文件: ArrayResize.mq5 6 kb Реter Konow 2017.12.11 10:54 #174 Vasiliy Sokolov:你写了一些胡言乱语。本质上是通过索引访问数组 的一个变种。在现实中,交易数字是随机的,当你需要解决一个真正的问题时,你的整个例子将崩溃。你指的是门票,我猜。我是指连续的交易号码。 你可以在旁边做一个平行阵列来记录门票。 或者几个平行数组来记录每个订单的其余数据。 Alexandr Andreev 2017.12.11 10:55 #175 Vladimir Karputov:下面是对动态数组 的检查: 一维的arr_dynamic 和二维的arr_dynamic_multi。正如你所看到的,当 数组的大小增加时,以前的值仍然存在。把它藏在这里纯粹是OOP和一切有用的东西 Реter Konow 2017.12.11 10:55 #176 Vladimir Karputov:下面是对动态数组 的检查: 一维的arr_dynamic 和二维的arr_dynamic_multi。正如你所看到的,如果你增加 数组的大小,以前的值仍然存在。 谢谢你。这是很有价值的信息。 Alexandr Andreev 2017.12.11 10:56 #177 我想讨论一下《印刷与评论》--为什么没有人关注? Sergey Dzyublik 2017.12.11 10:58 #178 Vasiliy Sokolov:有一个神奇的属性:容量,顺便说一下,由于某种原因,CHashMap中没有这个属性(这是开发人员的一个严重疏忽)。通过指定它,我们绕过了重新分区。你可以在这个任务中指定它,所以我认为没有任何问题。你可以通过构造函数在CHashMap中指定容量。瓦西里-索科洛夫。顺便说一下,为什么他们有不同的比例系数,这也非常奇怪。与简单的CArrayList相比,重新排列CHashMap很困难。 对于CHashMap来说,字典的大小应该是一个简单的数字,以保持字典中的哈希值的统一性。 CHashMap使用CPrimeGenerator来选择素数。 但不幸的是,CPrimeGenerator的实现没有达到预期,只包含了下面的值。const static int CPrimeGenerator::s_primes[]= { 3,7,11,17,23,29,37,47,59,71,89,107,131,163,197,239,293,353,431,521,631,761,919, 1103,1327,1597,1931,2333,2801,3371,4049,4861,5839,7013,8419,10103,12143,14591, 17519,21023,25229,30293,36353,43627,52361,62851,75431,90523,108631,130363,156437, 187751,225307,270371,324449,389357,467237,560689,672827,807403,968897,1162687,1395263, 1674319,2009191,2411033,2893249,3471899,4166287,4999559,5999471,7199369 }; 平均增长系数在1.2左右。 Реter Konow 2017.12.11 10:59 #179 Vasiliy Sokolov:你的任务是什么?请在这里公开提醒你自己。找到 最快和最有效的解决方案,在未来交易数量未知的情况下,向数组(列表、字典......)添加兆字节,并按交易号 从数组中检索兆字节。 Alexandr Andreev 2017.12.11 11:00 #180 Реter Konow:找到 最快和最有效的解决方案,将Megs添加到一个数组(列表,字典......),并从数组中检索Megs,未来交易的数量未知。可以理解的是,不存在开票的问题。 不过,我还是建议你开始用各种东西来复杂化你的代码,比如模板函数 1...11121314151617181920212223 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
为什么对某一问题的完美解决方案被认为是嘲弄?说真的,我不明白...
你的任务是什么?请在这里公开提醒你自己。
你写了一些胡言乱语。本质上是通过索引访问数组 的一个变种。在现实中,交易数字是随机的,当你需要解决实际问题时,你的整个例子就会崩溃。
等到你做好了,我相信明天就可以了。
***
如果我想确保当数组的大小改变时,数据不会从数组中消失,***
下面是对动态数组 的检查: 一维的arr_dynamic 和二维的arr_dynamic_multi。
正如你所看到的,当数组的大小增加 时,以前的值仍然存在。
你写了一些胡言乱语。本质上是通过索引访问数组 的一个变种。在现实中,交易数字是随机的,当你需要解决一个真正的问题时,你的整个例子将崩溃。
你指的是门票,我猜。我是指连续的交易号码。
你可以在旁边做一个平行阵列来记录门票。
或者几个平行数组来记录每个订单的其余数据。
下面是对动态数组 的检查: 一维的arr_dynamic 和二维的arr_dynamic_multi。
正如你所看到的,当 数组的大小增加时,以前的值仍然存在。
把它藏在这里纯粹是OOP和一切有用的东西
下面是对动态数组 的检查: 一维的arr_dynamic 和二维的arr_dynamic_multi。
正如你所看到的,如果你增加 数组的大小,以前的值仍然存在。
我想讨论一下《印刷与评论》--为什么没有人关注?
有一个神奇的属性:容量,顺便说一下,由于某种原因,CHashMap中没有这个属性(这是开发人员的一个严重疏忽)。通过指定它,我们绕过了重新分区。你可以在这个任务中指定它,所以我认为没有任何问题。
你可以通过构造函数在CHashMap中指定容量。
顺便说一下,为什么他们有不同的比例系数,这也非常奇怪。与简单的CArrayList相比,重新排列CHashMap很困难。
CHashMap使用CPrimeGenerator来选择素数。
但不幸的是,CPrimeGenerator的实现没有达到预期,只包含了下面的值。
平均增长系数在1.2左右。
你的任务是什么?请在这里公开提醒你自己。
找到 最快和最有效的解决方案,在未来交易数量未知的情况下,向数组(列表、字典......)添加兆字节,并按交易号 从数组中检索兆字节。
找到 最快和最有效的解决方案,将Megs添加到一个数组(列表,字典......),并从数组中检索Megs,未来交易的数量未知。
可以理解的是,不存在开票的问题。
不过,我还是建议你开始用各种东西来复杂化你的代码,比如模板函数