в mql4 Можно изменять только размер 1 уровня.
В общем, понятно. Придётся воспользоваться https://www.mql5.com/ru/code/7736
Вот жесть-то какая. После такого и руки опускаются продолжать писать что-либо на MQL4. =(
На форуме (сайте) у Игоря Кима посмотри. Там описано, как это сделать.
Что происходит? Как динамически изменять размерность многомерных массивов?
Объявите достаточно большие размеры по каждой размерности многомерного массива, и динамически управляйте ограничением для каждой размерности.
На форуме (сайте) у Игоря Кима посмотри. Там описано, как это сделать.
Это вот так описано-то?:
http://kimiv.ru/forum/viewtopic.php?t=212
KimIV: Во втором измерении размерность массива в MQL4 изменить невозможно.
=))
Объявите достаточно большие размеры по каждой размерности многомерного массива, и динамически управляйте ограничением для каждой размерности.
Тогда у меня оперативной памяти не хватит. =)
На форуме (сайте) у Игоря Кима посмотри. Там описано, как это сделать.
Это вот так описано-то?:
http://kimiv.ru/forum/viewtopic.php?t=212
KimIV: Во втором измерении размерность массива в MQL4 изменить невозможно.
=))
У меня также были вопросы по многомерным массивам. Но несколько другого плана. Решил их самостоятельно.
По Вашей проблеме можно предложить следующее.
Создаете второй массив с необходимыми размерами и копируетет из первого элементы массива во вновь созданный.
После этого первый массив функцией аррайресайз уменьшаете до одного элемента - это если массивы у Вас объявлены на глобальном уровне. Да и на локальном уровне тоже лучше уменьшить размер первого массива.
Коряво. К тому же непонятно, как дальше будет использоваться новый массив? Потребуется ли его еще раз менять? Все зависит от поставленной задачи.
Другой вариант - использовать несколько связанных между собой массивов. И внешним по отношению к массивам алгоритмом управлять этой структурой.
Офигеть! Я шокирован!
Вот, к примеру, в C++, можно было замечательно динамически создавать двумерные массивы, причём разной длины ... в общем, проще в коде:
int **p, i, n, m, j;
n=10; m=100;
p=new int*[n];
for(i=0; i<n; i++)
p[i] = new int[m++];
Имеется ввиду, что переменная m может быть изменена во время создания массива и всё будет ОК.
...
Посмотрел я библиотеку ZH_Dynamic_Arrays_Lib.mq4 (выложенную в сорцах этого сайта) и нашел в ней функцию:
//| IntArrayDynamicDimension2 (переключатель true/false - писать/читать, переключатель true/false - контролировать/не контролировать входные данные, |
//| переключатель true/false - печатать/не печатать содержимое массива после каждого обращения к функции, установка размера нулевой размерности, |
//| установка размера первой размерности, номер ячейки в нулевой размерности, номер ячейки в первой размерности, числовое значение для ввода/вывода, |
//| 1-о мерный массив для преобразования в многомерный и заполнения); |
//| int IntArrayDynamicDimension2 (bool Write_Read, bool CheckingERROR, bool PRINT, int SizeDimension_0, int SizeDimension_1, int Cell_0, int Cell_1, int Value, int Array[]);
Т.е. тут можно задать SizeDimension_1 для всего массива! Т.е. нельзя задать SizeDimension_1 для конкретного массива в массиве... (в общем, вы меня понимаете). =)
И что теперь делать? Это значит, что придётся искать самый большой "m" и указывать его в SizeDimension_1 что-ли? Но это же ... жесть какая-то!
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Поскольку в mql4 нет структур, я решил использовать многомерные массивы. Но вот проблема... как изменять их размеры-то?
Объявил я массивчик:
int myArray[][][];
Вроде как изменил размерность массива первого уровня:
ArrayResize(myArray, 3);
Попытался изменить размерность массива второго уровня:
ArrayResize(myArray[0], 2);
Поимел ошибку:
',' - wrong dimension
Переписал по-другому:
ArrayResize(myArray[0][][], 2);
Снова поимел ошибку:
'[' - array index is to be an integer