Как удалить элемент из массива (одномерного двумерного)? - страница 2

 
Seric29:

как работает функция 

Описания в справочнике про неё нет где про неё почитать?

Вы ветку читаете? Админ ответил - скоро будет описание

 
Seric29:

Я не уменьшаю размер массива а удаляю из него элемент...

void  ArrayFill( 
   void&  array[],       // массив 
   int    start,         // индекс начального элемента 
   int    count,         // количество элементов 
   void   value          // значение, которым заполняется массив 
   );

Это не подойдёт?

 
Ilya Malev:

У товарища написано: одномерного и двумерного. Ваша функция с двумерным не работает. Покажите, как сделать, чтобы и с тем и с тем работала функция с одинаковым названием :)

О двумерном я как-то не увидел. Но и двумерный так-же копируется сам в себя, только чуток отличаются значения с какого индекса писать в массив приёмник и с какого индекса читать из исходника. В принципе задача решаема и для 3-4 мерных массивов допустимых в mql

 
Seric29:

Я не уменьшаю размер массива а удаляю из него элемент это разные вещи. Я так понимаю по вашей функции удалено значение 1.13612, оно указано в строке dellArrayElement(3, array); массива т. е. 3ий элемент удалён из массива я правильно понял? Какая скорости работы подобных экспериментов сильно грузят программу? 

Но ведь если в условии

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как удалить элемент из массива (одномерного двумерного)?

Seric29, 2018.12.21 23:50

Как удалить элемент из массива? Нужно ли для этого знать количество элементов которое в нём хранится?

то естественно, что размер массива должен быть сокращён. Разве не так?

Да, для примера был удалён именно 3-й элемент массива. Скоростями и некоторыми частями тела меряются в других ветках. В этом случае скорость вполне нормальная. Для примерных значений скорости надо делать несколько запусков по несколько сотен удалений. А мне это зачем?

 
https://www.mql5.com/ru/forum/289594
Очистка массива от заданного (ых) элементов
Очистка массива от заданного (ых) элементов
  • 2018.11.12
  • www.mql5.com
Есть массив содержащий набор данных по типу 1,2,3,6,9,5,6,3,25,6,8,7,4 нужно удалить например значения 3 и на выходе получить тот же массив без 3 и...
 
Alexey Viktorov:

О двумерном я как-то не увидел. Но и двумерный так-же копируется сам в себя, только чуток отличаются значения с какого индекса писать в массив приёмник и с какого индекса читать из исходника. В принципе задача решаема и для 3-4 мерных массивов допустимых в mql

Я догадываюсь, что она в принципе решаема. Вот только она похоже не решаема для функции с одинаковым названием

 
Ilya Malev:

Я догадываюсь, что она в принципе решаема. Вот только она похоже не решаема для функции с одинаковым названием

Почему? Делай в виде элементарного класса.

Что-то типа

class A
{
 void DellArrElement(int i, double &arr[]);
 void DellArrElement(int i, double &arr[][]);
};

void A::DellArrElement(int i, double &arr[])
 {
  // тело функции для одномерного массива
 };

void A::DellArrElement(int i, double &arr[][])
 {
  // тело функции для двухмерного массива
 };

Написано "на коленке", так-что извиняй за возможные неточности.

 

Если порядок следования элементов в массиве не является важным, то делается достаточно быстро:

#define ARRAY_RESERVE_SIZE    1000

template<typename T>
void DeleteElementFromArray(T &array[], int elementToDelete)
{  
   int arraySize = ArraySize(array);
   if (elementToDelete < 0 || elementToDelete >= arraySize)
      return;
      
   array[elementToDelete] = array[arraySize - 1];
   ArrayResize(array, arraySize - 1, ARRAY_RESERVE_SIZE);
}

Это для одномерного массива. Двумерные и массивы большей мерности фактически являются одномерными массивами. Одномерный массив логически можно представить как N-мерный массив. То есть на самом деле всегда достаточно одномерного массива.

 
Alexey Viktorov:

Почему? Делай в виде элементарного класса.

Что-то типа

Написано "на коленке", так-что извиняй за возможные неточности.

А ты это откомпилировать пробовал?

 
Ilya Malev:

А ты это откомпилировать пробовал?

Пока ещё не придумали сделать компилятор прямо на сайте форума.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как удалить элемент из массива (одномерного двумерного)?

Alexey Viktorov, 2018.12.22 21:25

Почему? Делай в виде элементарного класса.

Что-то типа

class A
{
 void DellArrElement(int i, double &arr[]);
 void DellArrElement(int i, double &arr[][]);
};

void A::DellArrElement(int i, double &arr[])
 {
  // тело функции для одномерного массива
 };

void A::DellArrElement(int i, double &arr[][])
 {
  // тело функции для двухмерного массива
 };

Написано "на коленке", так-что извиняй за возможные неточности.