Использование динамических массивов

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alessandro Manchini
112
Alessandro Manchini  

Доброго времени суток, столкнулся с такой проблемой, нужно чтобы было что-то на подобии такого массива Examples[4][][5][2].

Но возможности языка позволяют только первое измерение делать динамическим, а все последующие - статическими.

Единственное что я придумал пока-что - это использовать структуру, в которой каждое измерение массива Examples[4][][5][2] будет отдельным массивом, но тогда это будет всё не целостно т.к. независимо друг от друга и может в определённый момент появиться рассинхронизация между массивами и это будет трудно достаточно заметить. 

Соответственно отсюда вопрос, каким образом можно реализовать подобное решение (Examples[4][][5][2]) в реалиях языка mql4?

Dmitry Fedoseev
57466
Dmitry Fedoseev  
struct S1{
   double a[5][2];
};

struct S2{
   S1 a[];
};

S2 a[4];

Или так:  Examples[][4][5][2]; 
Igor Makanu
9862
Igor Makanu  
Dmitry Fedoseev:
Или так:  Examples[][4][5][2]; 

или так: https://www.mql5.com/ru/forum/6729/page3#comment_674807

Alessandro Manchini
112
Alessandro Manchini  

Посмотрел код, если не ошибаюсь он написан под mql5 т.к. в mql4 нету подобного функционала. 

Artyom Trishkin
Модератор
56393
Artyom Trishkin  
Alessandro Manchini:

Посмотрел код, если не ошибаюсь он написан под mql5 т.к. в mql4 нету подобного функционала. 

Не заметил там отсутствующего в MQL4 функционала...

Igor Makanu
9862
Igor Makanu  
Alessandro Manchini:

Посмотрел код, если не ошибаюсь он написан под mql5 т.к. в mql4 нету подобного функционала. 

Вы, что там сговорились? второй раз за пару дней одни и те же вопросы (утверждения) 

по моей ссылке полностью готовый пример (это скрипт), запустите и проверьте, если не работает, тогда будем разбираться почему в МТ4 не работает

Alessandro Manchini
112
Alessandro Manchini  
Dmitry Fedoseev:
Или так:  Examples[][4][5][2]; 

А как обращаться к подобной структуре?

Dmitry Fedoseev
57466
Dmitry Fedoseev  
Alessandro Manchini:

А как обращаться к подобной структуре?

a[0].a - вот этот массив ресайзить надо, а так же a[1].a, a[2].a, a[3].a

и дальше так: a[0].a[0].a[0][0]

Alexey Viktorov
27723
Alexey Viktorov  
Dmitry Fedoseev:

a[0].a - вот этот массив ресайзить надо, а так же a[1].a, a[2].a, a[3].a

и дальше так: a[0].a[0].a[0][0]

А какой смысл в таких наворотах? Не проще сделать массив структур с массивами

struct S
 {
  double a1[];
  double a2[];
  double a3[];
  double a4[];
 }

S a[];
Или я что-то не так понял?
Konstantin Nikitin
9194
Konstantin Nikitin  
Alexey Viktorov:

А какой смысл в таких наворотах? Не проще сделать массив структур с массивами

Или я что-то не так понял?

Тут немного другое получается

                        |-массив-[3]={4,7,1}
           |-struct-[2]-|
           |            |-массив-[3]={2,8,5}
struct-[2]-|
           |            |-массив-[3]={9,4,1}
           |-struct-[2]-|
                        |-массив-{3}={5,2,7}

То-есть вложенные массивы A[][][] сделать динамическими. Самый оптимальный вариант конечно пройти через структуры.

TheXpert
18305
TheXpert  
Alessandro Manchini:

Соответственно отсюда вопрос, каким образом можно реализовать подобное решение (Examples[4][][5][2]) в реалиях языка mql4?

struct S
{
   double a[][5][2];
};

S Examples[4];

void OnStart()
{
   ArrayResize(Examples[0].a, 1);
   Print(Examples[0].a[0][0][0]);
}
Можно конечно допилить, чтобы было обращение Examples[0][0][0][0], но будет намного медленней
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий