Помогите с массивами. - страница 2

 

Да, изячно, alexjou. Я даже и сам не ожидал, что все так просто. Вот только что означает твое "Важно соблюдать один и тот же порядок следования размерностей массива на протяжении всей программы" - я так и не понял. Соответствие-то взаимно однозначное. Ну то есть по p индексы i, j и т.п. вроде как однозначно восстанавливаются.

 
Ты прав. Я просто несколько коряво выразился. Имелось в виду следующее: при вычислении индекса по правилу p = i + j * L + k * L * M + ... член без сомножителя (неважно, как он обозначен) должен всегда соответствовать первому измерению <Dim(1)>, с одним сомножителем, равным размерности первого измерения -- второму <Dim(2)>, с двумя (размерности первого и второго измерений) -- третьему <Dim(3)>, ... , с (n-1) сомножителями <Dim(n-1)*Dim(n-2)*...*Dim(1)> -- n-му, т.е. последнему. При этом, разумеется, порядок следования вложенных циклов значения не имеет. Главное тут -- не запутаться. Примерно так же вычисляются и указатели на подмассивы в случае, если несколько многомерных массивов пакуются в один одномерный. К слову, именно такой способ я употребляю уже много лет, и он меня еще ни разу не подводил. Небольшие затраты на вычисление индексов и указателей с лихвой окупаются большей вычислительной эффективностью алгоритма в целом и рациональностью в распределении памяти. Разумеется, все сказанное -- сугубое ИМХО.
 

Доброго времени суток!
Подскажите как можно установить новый размер для второго измерения массива? По этой ссылке https://docs.mql4.com/ru/array/ArrayResize есть пример для первого. Спасибо.

 
Никак. См. выше.
 

А если нужно объявить массив размер второго измерения у которого ращитывается? Что то вроде этого:

int a;
a=2+2;
int masiv[2][a];
Это можно как то реализовать?
 
Невозможно. Проще всего поменять измерения местами. Или запаковать в одномерный.
Причина обращения: