Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Да. Когда у нас заранее известны размерности массивов, то естественно удобнее пользоваться явным определением и явным обращением. Но бывают случаи когда размерности заранее неизвестны и нужно реализовывать динамический массив. Тогда обращение с помощью расчета индекса себя оправдывает. Хотя можно заведомо выделить достаточный объем памяти. Но будет ли он достаточен. Да и ресурсы могут понадобиться в другом месте.
Тоесть мы не можем изменить разверность второго измерения массива. Или все таки есть какието способы.
Ну мне то нужно было, чтобы в одномерный массив загнать двухмерный. Когда то давно, на С, делал двухмерные массивы и мне советовали их переделывать в одномерные типа [i*x+j]. Я никогда не понимал за чем это, думал так быстрее, и вот теперь решил проверить.
Так и проверять нужно было на С. Конечно же обработка одномерного массива быстрее. Если есть явное вычисление индекса, разности быть не должно поскольку компилятор двойные скобки ([][]) "раскрывает". То есть переводит в умножение и сложение. Но есть один нюанс: при обработке одномерного массива индекс явно не вычислятют (нужно использовать алгоритмы обработки соответствующие представлению данных), особенно избегают операции умножения. Более правильно так :
Успехов.
Из выше сказанного, решил сделать тест а рифметических операций . Оказалось, что время затрачиваемое на сложение и вычитание, одинаковое или примерно одинаковое. Время затрачиваемое на умножение примерно в 13 раз больше. (очень не маленькая разница) А время на деление - примерно в 2 раза больше, чем на умножение и примерно в 25 раз медленней, чем сложение или вычитание.
Надеюсь это хоть кому-то пригодиться. :)
Попробовал так в mql4, получилось значительно быстрей, разница в 5%, в пользу двухмерного. Спасибо за идею.
Та не за что.
Если нужен просто "потоковый" доступ, то конечно можно еще ускорить: можно обойтись без некоторых присваиваний и индекс jj сделать сплошным - то есть инициализировать во внешнем цикле, а инкременировать во внутреннем.
Будет чуть медленнее, чем доступ как к одномерному массиву (см пост от Vinin - то что там описано наверняка быстрее, в крайнем случае для мкл не медленнее, чем доступ к двумерному массиву, но есть разница в количестве циклов при организации доступа и эксперимент ИМХО не будет показательным).
В С было бы быстрее использовать адресную арифметику: двигать указатели и считывать/записывать значения по адресу, но то в С....
Успехов.