Очистка массива от заданного (ых) элементов - страница 17

 
Алексей Тарабанов:

Не надо над людьми издеваться 

Даже и не начинал ;-)

я даже промолчал про "контрольную сумму" при наличии эталона

можно-же вспомнить про асимптоматику, по которой в конечном итоге и оценивается скорость.
И что она зависит от объёма исходных данных, кол-ва удаляемых элементов и их расположения/распределения (которые в реальности НИКОГДА не равномерны).

и что можно/нужно строить графики.

целевая задача конечно не стоит таких усилий, но как-то надо соблюдать методики

я могу продолжить ещё на пару-тройку страниц :-)

 

Добавил вариант с ротацией,паузами и разогревом(первый проход не учитывается)

Файлы:
 
Stanislav Dray:

Добавил вариант с ротацией,паузами и разогревом(первый проход не учитывается)

Странно что многие примеры не могут правильно работать со структурами... Может конечно я чего то не понимаю...

 
Vladimir Pastushak:

Странно что многие примеры не могут правильно работать со структурами... Может конечно я чего то не понимаю...

Избавляйтесь от структур в пользу классов. В MQL с ними легче работать.

 
Vladimir Pastushak:

Странно что многие примеры не могут правильно работать со структурами... Может конечно я чего то не понимаю...

В смысле? Не понял о чём вы. Какие примеры работают не правильно.? всё ж работает

1

 
Vladimir Pastushak:

Странно что многие примеры не могут правильно работать со структурами... Может конечно я чего то не понимаю...

Функции неизвестно по какому полю структуры надо сравнивать.

 
Dmitry Fedoseev:

Функции неизвестно по какому полю структуры надо сравнивать.

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

 
Разобрался, в струтуре происходило смещение поля а не всей структуры...
 
Nikolai Semko:

Изучай код.

Проверил свой код. Ты все правильно сделал. 

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

//+------------------------------------------------------------------+
int PeterArray(int &Arr[],const int val) // вариант Peter Konow
  {
   int deleted=0,q=0;
   for(int a1=0; a1<ArraySize(Arr); a1++)
     {
      if(deleted)Arr[q]=Arr[q+deleted];
      if(Arr[q]==val){deleted++; q--;} <-----------Выполнение этих операций занимает кучу времени.
      q++;
     }
   ArrayResize(Arr,q);
   return (q);
  }
//+------------------------------------------------------------------+

Без этой строчки, код исполняется за 2 микросекунды. Но, без нее нельзя.

Решение пусть и не самое быстрое, но пожалуй самое сжатое.


ЗЫ. Все таки одну ошибку при написании функции по моему решению ты допустил:

У меня стоит не 

ArrayResize(Arr,q);

а

ArrayResize(Arr,ArraySize(Arr) - deleted);

Но, все равно спасибо.

 
Vladimir Pastushak:

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

При присвоении одного элемента другому, то есть при использовании знака "="?

Замечал такое, над самому делать свое копирование. Ни на что надеяться нельзя.