MQL5 не позволяет динамическому массиву сохранять значение

Я пытаюсь поиграть с хранилищем массива MQL 5. Когда я не использую ArrayResize(), я получаю сообщение об ошибке:

double d [];
d[0] = 1;
for (int i = 0; i< ArraySize(d); i++)
   {
   Print(d[i]);

Ошибка заключается в следующем:

2018.03.26 13:17:25.379 2018.02.02 00:00:00   array out of range in 'testing.mq5' (69,2)

Принимая во внимание, что когда я использую ArrayResize(), я получаю вывод.

double d [];
ArrayResize(d,2);
d[0] = 1;
for (int i = 0; i< ArraySize(d); i++)
   {
   Print(d[i]);
   }

Выход: 1

Это сработало. Но если я попытаюсь добавить элемент массива за пределы размера массива, я получу ошибку out of range.

Я хочу добиться того, чтобы массив оставался динамическим с точки зрения размера.
Скажем, мне задан размер 2, и во время моей программы необходимо добавить элемент массива в 3, тогда массив должен принять его.

Я не могу использовать ArrayResize(), так как это уничтожит другие значения, чего я не хочу.
Пожалуйста, предложите мне средний выход, чтобы я мог ввести любое количество значений в массив независимо от его размера.


person Jaffer Wilson    schedule 26.03.2018    source источник


Ответы (1)


#include <Arrays\ArrayObj.mqh> подходит для хранения объектов любого класса, ArrayInt для списка целых чисел, ArrayDouble для списка удвоений и чисел с плавающей запятой. Добавляйте столько, сколько вам нужно, когда вам нужно, и вам никогда не придется изменять размер или перехватывать индекс из массива.

CArrayInt *integers;
OnInit(){integers=new CArrayInt();}
OnDeinit(int reason){delete(integers);}
OnTick(){
   integers.Add(0);integers.Add(1);integers.Add(2);
   int firstElem=integers.At(0); firstElem=integers[0];
   int lastElem=integers.At(integers.Total()-1);
   int totalElementsInTheList=integers.Total();
   integers.Delete(2); // delete element with index 2. deleting element that match with the object is not supported in basic API
}
person Daniel Kniaz    schedule 26.03.2018