算法、解决方法、其性能的比较 - 页 17

 

在具体任务中:index => value
CHashMap 更快的CArrayList

CArrayList 占用的空间要少两倍以上,而且在添加新元素时,它的重新排列也比较少(CArrayList 的增长系数为2,而CHashMap 在目前的实现中约为1.2)。
而且在读取CArrayList 的结果时,也没有那么多的麻烦。

 
Sergey Dzyublik:

在这个特定的任务中:index => value
CArrayListCHashMap 快。

CArrayList 占用的空间要少两倍以上,而且在添加新元素时,它的重建次数也少(CArrayList 的增长系数为2,而CHashMap 在目前的实现中约为1.2)。
而且在读取CArrayList 的结果时,也没有那么多的麻烦。

有一个神奇的属性:容量,顺便说一下,由于某种原因,CHashMap中没有这个属性(这是开发人员的一个严重疏忽)。通过指定它,我们绕过了重新分区。你可以在这个任务中指定它,所以我不认为有什么问题。

 
Sergey Dzyublik:

在具体任务中:index => value
CHashMap 更快的CArrayList

CArrayList 占用的空间要少两倍以上,而且在添加新元素时,它的重新排列也比较少(CArrayList 的增长系数为2,而CHashMap 在目前的实现中约为1.2)。
而且在读取CArrayList 的结果时也没有那么多麻烦。

为什么它们的规模系数不同,也是非常奇怪的。与简单的CArrayList 相比,重新排列CHashMap会更加困难。

 

一个更加浓缩的版本。

//+------------------------------------------------------------------+
//|                                                      Magic 2.mq5 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
int    All_magics[];
int    order_number;
int    Random_orders_of_strategy;
//+------------------------------------------------------------------+
void Trading()
{
 Random_orders_of_strategy = MathRand();
 //----------------------------------------
 //Имитируем открытие неопределенного количества ордеров стратегии.
 //----------------------------------------
 for(int a1 =  0; a1 < Random_orders_of_strategy; a1++)
   {
    int this_magic = MathRand();
    //----------------------------
    order_number++;
    //---------------------------------
    //Меняем размрер массива на каждой итерации.
    //---------------------------------
    ArrayResize(All_magics,order_number);
    All_magics[order_number - 1] = this_magic;
    //---------------------------------
   }
 //----------------------------------------
}
//+------------------------------------------------------------------+
int Get_magic(int deal_number)
{
 return(All_magics[deal_number - 1]);
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Trading();
   //--------------------------
   ulong t1 = GetMicrosecondCount();
   Get_magic(1000);
   ulong t2 = GetMicrosecondCount();
   //--------------------------
   Print("Время исполнения функции Get_magic() при количестве ордеров ",Random_orders_of_strategy," равно ",t2 - t1);
   //--------------------------
   Print("Random_orders_of_strategy  ",Random_orders_of_strategy);
   Print("magic 1:  ",Get_magic(1),"  magic 2: ",Get_magic(2),"  magic 3: ",Get_magic(3));
   
  }
//+------------------------------------------------------------------+
 
Реter Konow:

一个更加浓缩的版本。


现在让我们用

模板<类型名 T>

 
Alexandr Andreev:

现在让我们用

模板<类型名 T>

为什么?
 
Реter Konow:

一个更加浓缩的版本。

这名男子继续嘲弄...

 
Реter Konow:

一个更加浓缩的版本。

你写了一些废话。本质上是通过索引访问数组 的一个变种。在现实中,交易数字是随机的,当你需要解决一个真正的问题时,你的整个例子将崩溃。

 
Реter Konow:
为了什么?

嗯,有一些功能,如重写一个数组,添加一个新行...在标准版中,它们不是通用的,所以你必须一直重写它们。

所以你会得到一个你自己的小函数的模板--某种常见的

 
Yury Kulikov:

这名男子继续嘲弄...

为什么某个问题的完美解决方案会被认为是欺凌?说真的,我不明白...