Например копирование в другой массив со сдвигом...
Подскажите, пожалуйста!
Есть ли какой-нибудь ресурсосберегающий способ в MQL4 сдвинуть данные в массиве на 1?
При рассмотрении вопроса: что выбрать память или быстродейсствие? Выбираем быстродействие в ущерб памяти.
.
P.S. Цикл не предлагать.
Если последовательность данных не имеет значения, то можно перемещать Указатель на последний элемент. Тогда и массив трогать не надо.
Ай да спасибочки!
То что нужно!
.
/////////////// void start() // { int a[5]={1,2,3,4,5}; int b[5]={1,2,3,4,5}; ArrayCopy(a,b,0,1,4); Alert("Массив a[5]={",a[0],a[1],a[2],a[3],a[4],"}"); return; } ///////////////
.
Вопрос снят!
Просто двигается указатель на наше начало массива. Вначале это нулевой элемент, потом первый, второй и так далее. Поэтому при появлении нового бара меняется только одно значение. когда указатель доходит до конца массива, то начинаем опять с нуля. При этом рассчитать фактический номер элемента массива всегда можно.
Можно конечно точно так же двигаться в обратную сторону. Зависит от вкуса и порядка формирования массива.
Просто двигается указатель на наше начало массива. Вначале это нулевой элемент, потом первый, второй и так далее. Поэтому при появлении нового бара меняется только одно значение. когда указатель доходит до конца массива, то начинаем опять с нуля. При этом рассчитать фактический номер элемента массива всегда можно.
Можно конечно точно так же двигаться в обратную сторону. Зависит от вкуса и порядка формирования массива.
А, понятно! Я думал об этом, но в таком случае надо было бы массив с большим запасом делать.
Все-таки склонюсь к использованию встроенной функции.
Спасибо.
А, понятно! Я думал об этом, но в таком случае надо было бы массив с большим запасом делать.
Все-таки склонюсь к использованию встроенной функции.
Спасибо.
Запаса массива не нужно. Ровно столько, сколько нужно. И ускорение работы дает существенное. Все операции с массивами занимают довольно продолжительное время (относительно конечно).
Запаса массива не нужно. Ровно столько, сколько нужно. И ускорение работы дает существенное. Все операции с массивами занимают довольно продолжительное время (относительно конечно).
Значит, я сначала не так думал. Т.е. после того как массив заканчивается начинаем сначала пререзаписывать элементы массива вновь пришедшими данными(по кольцу) ! Понятненько!
Безусловно получается, что это самый быстый способ! Так..., вот теперь надо правильно организовать формирование указателя на нужный элемент и все будет пучком.
Еще раз всех благодарю.
есть еще одно оригинальное решение..
индекс 0,1,2,3,4,5,6,7,8
данные 1,2,3,4,5,6,7,8,9
First Point Index 0
Last Point Index 1
для того что бы работать с таким массивом необходимо просто контролировать положение указателей fist и last
через функции получения доступа к определеному индексу массива..
при этом при записи нового элемента указатель первого и последнего производит смещение на один..
подобная схема массива это FILO первый вошел последний вышел..
на пример при записи двух новых элементов
First Point Index 2
Last Point Index 3
при этом 9 элементом массива будет индекс 3
а 0 элементом индекс 2
Вот код смены индекса
//--------------------------------- MathCyclePrext ----------------------------------- // Cycle Countter to Prev or Next int MathCyclePrext(int Index,int iIncrease,int iMaxIndex,int iMinIndex) { Index=Index+iIncrease; while (Index<iMinIndex) Index=iMaxIndex-(iMinIndex-Index)+1; while (Index>iMaxIndex) Index=iMinIndex+(Index-iMaxIndex)-1; return(Index); }
MaxIndex - 8
MinIndex - 0
элемента массива от минимального до максимального..
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите, пожалуйста!
Есть ли какой-нибудь ресурсосберегающий способ в MQL4 сдвинуть данные в массиве на 1?
При рассмотрении вопроса: что выбрать память или быстродейсствие? Выбираем быстродействие в ущерб памяти.
.
P.S. Цикл не предлагать.