Nikolai Karetnikov:
Всем доброго здоровья!
Приведенный код удаляет дубликаты из коллекции
После окончания на вкладке Experts вижу сообщение о четырех оставшихся в живых объектах
Те самые дубликаты, которые я принудительно удаляю
Хотелось бы понять, как так-то? ))
или кто укурился с перегрузкой оператора =
или вот тут течёт:
lPAi = new CPositionAgent(); lPAi = this[i];
Maxim Kuznetsov:
или кто укурился с перегрузкой оператора =
или вот тут течёт:
)))))
Спасибо!
Nikolai Karetnikov:
)))))
Спасибо!
в коде закрался баг
#include <Arrays\ArrayObj.mqh> class CPositionAgent; class CPositionCollection : public CArrayObj { public: CPositionAgent *operator[](const int inIndex) const { return (CPositionAgent*)At(inIndex);} int CPositionCollection::doUnique(void) { CPositionAgent *lPA0, *lPAi; lPA0 = this[0]; for(int i=1;i<this.m_data_total;i++) { lPAi = new CPositionAgent(); lPAi = this[i]; if(this.count(this[i])>1) { delete this[i]; this.Detach(i--); } } return(this.m_data_total); } private: int count(CPositionAgent *inPA) { int lC=0; for(int i=0;i<this.Total();i++) { if(inPA.Compare(this[i],1)==0) { lC++; } } return(lC); } }; class CPositionAgent : public CObject { public: ulong meTicket; void CPositionAgent::CPositionAgent(ulong inTicket){this.meTicket=inTicket;return;} void CPositionAgent::CPositionAgent(){return;} int CPositionAgent::Compare(const CObject *node,const int mode=0)const override { CPositionAgent *inNode = (CPositionAgent*)node; if( this.meTicket == inNode.meTicket ) {return(0); } if( this.meTicket > inNode.meTicket ) { return(1); } else { return(-1); } } }; void OnStart() { CPositionCollection lCollOfPosAgents; lCollOfPosAgents.Add(new CPositionAgent(1)); lCollOfPosAgents.Add(new CPositionAgent(1)); lCollOfPosAgents.Add(new CPositionAgent(3)); lCollOfPosAgents.Add(new CPositionAgent(2)); lCollOfPosAgents.Add(new CPositionAgent(2)); lCollOfPosAgents.Add(new CPositionAgent(4)); lCollOfPosAgents.Add(new CPositionAgent(4)); lCollOfPosAgents.Add(new CPositionAgent(4)); lCollOfPosAgents.doUnique(); for(int i=0;i<lCollOfPosAgents.Total();i++) { Print(lCollOfPosAgents[i].meTicket); } }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем доброго здоровья!
Приведенный код удаляет дубликаты из коллекции
После окончания на вкладке Experts вижу сообщение о четырех оставшихся в живых объектах
Те самые дубликаты, которые я принудительно удаляю
Хотелось бы понять, как так-то? ))