По логике, нет, так не должно работать.
TrimExcess же сокращает капасити, до фактического числа элементов.
И должно получится четыре элемента.
Тут не видно как обрабатывается meQ.m_array[], проверьте на лишнюю итерацию, в самой библиотеке.
Хотя если капасити уменьшили, а итераций больше, вообще должна вылетать ошибка выход за пределы границ массива ))
Странно в общем.
По логике, нет, так не должно работать.
TrimExcess же сокращает капасити, до фактического числа элементов.
И должно получится четыре элемента.
Тут не видно как обрабатывается meQ.m_array[], проверьте на лишнюю итерацию, в самой библиотеке.
Хотя если капасити уменьшили, а итераций больше, вообще должна вылетать ошибка выход за пределы границ массива ))
Странно в общем.
Нет времени сравнивать с реализацией типа данных Очередь на других языках.
Мне нужен был объект сдвигающий влево массив целых чисел в момент постановки нового числа в его край. Думал, что очередь мне пригодится. Похоже, что MQL тут намутил. Было бы неплохо от них какую-то обратную связь услышать, хотя этот колхоз...
class CMyPseudoQueue { public: int meArray[]; void CMyPseudoQueue::CMyPseudoQueue(int inSize); void CMyPseudoQueue::doPush(int inValue); }; void CMyPseudoQueue::CMyPseudoQueue(int inSizeLimit) { ArrayResize(meArray,inSizeLimit); ArrayInitialize(meArray,0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CMyPseudoQueue::doPush(int inValue) { int lSize; lSize = ArraySize(meArray); if(lSize == 1) { meArray[0]=inValue; return; } int lArray[]; int lCopied; lCopied = ArrayCopy(lArray,meArray,0,1,lSize-1); ArrayResize(lArray,lSize); lArray[lSize-1]=inValue; lCopied = ArrayCopy(meArray,lArray,0,0,WHOLE_ARRAY); }
а так, если кто-то сможет предложить вариант лучше или оптимизировать мой код - буду признателен
Да, многие ругались на не качественный порт библиотеки Generic.
Я тут тоже сейчас с очередью мудрю, через ArrayInsert(), по этому обратил внимание на топик.
но ArrayInsert сейчас не работает, обещали поправить.
https://www.mql5.com/ru/forum/350880/page16#comment_18385889
- 2020.09.21
- www.mql5.com
а так, если кто-то сможет предложить вариант лучше или оптимизировать мой код - буду признателен
Вариант очереди на Си и на С++ с ООП
https://prog-cpp.ru/data-queue/
- 2018.12.14
- Елена Вставская
- prog-cpp.ru
template<typename T> void CQueue::TrimExcess(void) { //--- calculate threshold value int threshold=(int)(((double)ArraySize(m_array))*0.9); //--- set a сapacity equal to the size if(m_size<threshold) SetCapacity(m_size); }
??? Это к вопросу о реализации. Может, конечно, я чего-то не догоняю?)))
ИМХО, конечно, но:
if(m_size<ArraySize(m_array)) SetCapacity(m_size);
??? Это к вопросу о реализации. Может, конечно, я чего-то не догоняю?)))
ИМХО, конечно, но:
Интересно, что автор библиотеки вложил в понятие 0.9 ))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте!
Вот это точно так должно работать, что после Dequeue и TrimExcess в хвост очереди прилетает еще одна четверка?
Спасибо!