Библиотеки: ZH_Dynamic_Arrays_Lib

 

ZH_Dynamic_Arrays_Lib:

Набор функций для эмуляции динамических массивов.

Author: Vadim Zhunko

 

Извините конечно за вопрос:"но для чего он нужен ?"

 
Фундаментально! Должно быть в некоторых ситуациях очень полезно!
Вот бы пару примеров для демонстрации достоинств и лучшего понимания как это применять.
 
azfaraon:

Извините конечно за вопрос:"но для чего он нужен ?"



Динамические массивы нужны в основном для экономии ОЗУ.
Для разных задач можно формировать массив с разным количеством ячеек.
Средствами MQL4 пока такое возможно сделать только в первом измерении массива.
Остальные измерения не поддаются изменению.
 
VBAG:
Фундаментально! Должно быть в некоторых ситуациях очень полезно!
Вот бы пару примеров для демонстрации достоинств и лучшего понимания
как это применять.

Вот для отладки библиотеки скрипт сделал. Попробуйте разобраться.


//+-----------------------------------------------------------------------------------+
//|                                                       Checking_Dynamic_Arrays.mq4 |
//|                                                       Copyright © Zhunko          |
//|08.01.2008                                             zhunko@mail.ru              |
//+-----------------------------------------------------------------------------------+
//| Скрипт для контроля работоспособности библиотеки функций динимических массивов.   |
//+-----------------------------------------------------------------------------------+
#property copyright "Copyright © Zhunko"
#property link      "zhunko@mail.ru"
#property show_inputs
#import "ZH_Dynamic_Arrays_Lib.ex4"
 double DoubleArrayDynamicDimension3 (bool Write_Read, bool CheckingERROR, bool PRINT, 
int SizeDimension_0, int SizeDimension_1, int SizeDimension_2, int Cell_0, int Cell_1, 
int Cell_2, double Value, double Array[]);
#import
extern bool Write_Read = false;
extern int  Cell_0     = 0;
extern int  Cell_1     = 0;
extern int  Cell_2     = 0;
extern int  Cell_3     = 0;
extern int  SizeDim_0  = 10000;
extern int  SizeDim_1  = 100;
extern int  SizeDim_2  = 9;
extern int  SizeDim_3  = 1;
//----
int      a, b, c, d, n; // Переменые для циклов.
string   str1, str2;
double   Array[];
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
 {
  datetime time;
  double   Value;
  //----
  if (Write_Read == false)
   {
    ArrayResize (Array, SizeDim_0 * SizeDim_1 * SizeDim_2 /* SizeDim_3*/);
    time = TimeLocal();
    for (a = 0; a < SizeDim_0 * SizeDim_1 * SizeDim_2 * SizeDim_3; a++) Array[a] = a;
    str1 = TimeToStr (TimeLocal() - time, TIME_MINUTES|TIME_SECONDS);
    Comment ("Время работы одномерного массива = ", str1);
    // Контроллируем запись.
    time = TimeLocal();
    for (a = 0, n = 0; a < SizeDim_0; a++)
     for (b = 0; b < SizeDim_1; b++)
      for (c = 0; c < SizeDim_2; c++)
        {
         Value = Array[SizeDim_1 * SizeDim_2 * a + SizeDim_2 * b + c];
//         Value = DoubleArrayDynamicDimension3 (Write_Read, false, false, SizeDim_0, SizeDim_1, SizeDim_2, a, b, c, Value, Array);
//         Alert ("Array[", n, "] = ", IntArrayDynamicDimension3 (Write_Read, false, false, SizeDim_0, SizeDim_1, SizeDim_2, a, b, c, Value, Array));
        }
    str2 = TimeToStr (TimeLocal() - time, TIME_MINUTES|TIME_SECONDS);
    Comment ("Время работы одномерного массива = ", str1, "\nВремя работы динамического массива = ", str2);
//    Comment (DoubleArrayDynamicDimension3 (Write_Read, false, false, SizeDim_0, SizeDim_1, SizeDim_2, Cell_0, Cell_1, Cell_2, Value, Array));
   }
  else
   {
    time = TimeLocal();
    for (a = 0, n = 0; a < SizeDim_0; a++)
     for (b = 0; b < SizeDim_1; b++)
      for (c = 0; c < SizeDim_2; c++, n++)
         {
          Array[SizeDim_1 * SizeDim_2 * a + SizeDim_2 * b + c] = n;
//          DoubleArrayDynamicDimension3 (Write_Read, false, false, SizeDim_0, SizeDim_1, SizeDim_2, a, b, c, n, Array);
         }
    str1 = TimeToStr (TimeLocal() - time, TIME_MINUTES|TIME_SECONDS);
    Comment ("Время работы динамического массива = ", str1);
    // Контроллируем запись.
    time = TimeLocal();
    for (a = 0; a < SizeDim_0 * SizeDim_1 * SizeDim_2; a++)
     {
      Value = Array[a];
//      Alert ("Array[", a, "] = ", Array[a]);
     }
    str2 = TimeToStr (TimeLocal() - time, TIME_MINUTES|TIME_SECONDS);
    Comment ("Время работы динамического массива = ", str1, "\nВремя работы одномерного массива = ", str2);
   }
  //----
  return(0);
 }
//+------------------------------------------------------------------+
 

Спасибо. Обязательно на досуге буду изучать.

 

Что тут скажеш очень много светлых голов разбивается о стену непонимания. Я вот например не понимаю зачем сушить голову универсальными вещами когда очень часто и очень многое можно решить просто найдя какой нибудь изящный выход.

PS с уважением к титанической проделанной работе.