Инициализация динамического массива с типом данных "структура".

 

Привествую.

Для инициализации динамических массивов элементами которых являются стандартные типы данных есть функция ArrayInitialize().

Возникла ситуация, когда мне необходима аналогичная функция в индикаторе, но для инициализации динамического массива где элементы массива кастомная структура с разными типами данных.

Вопрос, как правильно реализовать функцию инициализации динамического массива, где элементами массива является структура?

Первоначального количество элементов неизвестно.

 

набросать шаблон типа :

template<T> ArrayInitialize ( T &arr[], const T &value) .....

 

в структурах как и в классах можно обьявить конструктор

 
Igor Makanu:

в структурах как и в классах можно обьявить конструктор

Да, я в курсе. Конструктор объявлен.

Я только что отдебажил ArrayInitialize() и она работает только при связывании инициализируемого буфера с индикаторным буфером, а я этого не знал.

Как  я понял, ArrayInitialize() выполняет ArrayFree(),ArrayResize(),ArrayFill().

По сути моего вопроса, мне нужен ArrayResize() + конструктор структуры.

 

задача не совсем понятна

если у Вас все упирается в 

White Rabbit:

Первоначального количество элементов неизвестно.

тогда

- или копировать содержимое во временные массивы/структуры - понятно, что это расход ресурсов

- или уходите из структур в классы и используйте вместо массива структур - список классов, со списками Вы можете и добавлять новые элементы и удалять


в общем я не понял проблему (((

 
Igor Makanu:

задача не совсем понятна

если у Вас все упирается в 

тогда

- или копировать содержимое во временные массивы/структуры - понятно, что это расход ресурсов

- или уходите из структур в классы и используйте вместо массива структур - список классов, со списками Вы можете и добавлять новые элементы и удалять


в общем я не понял проблему (((

Задача следующая

Я пишу индикатор по свечному анализу.

Массив со структурой нужен для хранения в структуре копируемых данных о свече (time,open,close,high,low), а так же вычисляемых параметров: типа свечи бычья/медвежья, направление тренда, паттерн свечи (дожи, молот, марибозу, длинная/короткая и т.д.), формация в которую свеча входит.

При первом проходе в индикаторе, по каждой свече в массиве заполняются поля структуры.

Далее, после поступления новой свечи - она должна добавляться в массив.

И на данный момент я столкнулся с проблемой - как правильно расширять динамический массив и в каком месте, чтобы не плодить сущности.

 
White Rabbit:

Задача следующая

Я пишу индикатор по свечному анализу.

Массив со структурой нужен для хранения в структуре копируемых данных о свече (time,open,close,high,low), а так же вычисляемых параметров: типа свечи бычья/медвежья, направление тренда, паттерн свечи (дожи, молот, марибозу, длинная/короткая и т.д.), формация в которую свеча.

При первом проходе в индикаторе, по каждой свече в массиве заполняются поля структуры.

Далее, после поступления новой свечи - она должна добавляться в массив.

типичная дилемма :

набор структур vs структура наборов.

работая с индикаторными буферами лучше второе. То есть каждое свойство ваших "свечей" - отдельный индикаторный буфер.

 
White Rabbit:

Далее, после поступления новой свечи - она должна добавляться в массив.

я предложил Вам списки, именно так и будет все работать - добавили элемент по открытию нового бара и заполнили содержимое - и структуры Вам не нужны, поля в классе time,open,close,high,low....... опишете и заполняйте их

https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayobj

 
Maxim Kuznetsov:

типичная дилемма :

набор структур vs структура наборов.

работая с индикаторными буферами лучше второе. То есть каждое свойство ваших "свечей" - отдельный индикаторный буфер.

Спасибо, я как раз к этому пониманию и пришел, что проще привязаться к индикаторным буферам, чем плодить кучу функций.

 
Igor Makanu:

я предложил Вам списки, именно так и будет все работать - добавили элемент по открытию нового бара и заполнили содержимое - и структуры Вам не нужны, поля в классе time,open,close,high,low....... опишете и заполняйте их

https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayobj

Спасибо, я как раз после реализации в функциональном стиле, хочу реализовать на классах.

Решение разными способами - это скажем так для построения ассоциативности в голове между проблемами и решаемыми методами :) 

 

зависит от структуры данных, которую Вы хотите хранить/обрабатывать

если Вы можете "влезть" в double - однозначно индикаторные буфера с параметром INDICATOR_CALCULATIONS , эти буфера терминал сам и сдвигает по открытию бара и память для них распределяет

Причина обращения: