ArrayInsert

Вставляет в массив-приемник из массива-источника указанное число элементов, начиная с указанного индекса.

bool  ArrayInsert(
   void&        dst_array[],          // массив-приемник
   const void&  src_array[],          // массив источник
   uint         dst_start,            // индекс в массиве-приемнике для вставки
   uint         src_start=0,          // индекс в массиве-источнике для копирования
   uint         count=WHOLE_ARRAY     // количество вставляемых элементов
   );

Параметры

dst_array[]

[in][out]  Массив-приемник, в который необходимо добавить элементы.

src_array[]

[in]  Массив-источник, из которого необходимо добавить элементы.

dst_start

[in]  Индекс в массиве-приемнике для вставки элементов из массива-источника.

src_start=0

[in]  Индекс в массиве-приемнике, начиная с которого берутся элементы массива-источника для вставки.

count=WHOLE_ARRAY

[in]  Количество добавляемых элементов из массива-источника. Значение WHOLE_ARRAY означает все элементы с указанного индекса до конца массива.

Возвращаемое значение

Возвращает true в случае успеха, иначе false. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError(). Возможные ошибки:

  • 5052 – ERR_SMALL_ARRAY (параметры start и/или count заданы неверно или исходный массив src_array[] является пустым),
  • 5056 – ERR_SERIES_ARRAY (массив не может быть изменен, индикаторный буфер),
  • 4006 – ERR_INVALID_ARRAY (копирование в себя недопустимо, либо массивы имеют разный тип, либо массив фиксированного размера, который содержит объекты класса или структуры с деструктором),
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (массив содержит не POD-структуры, то есть простое копирование невозможно),
  • ошибки изменения размера массива-приемника dst_array[] – они приведены в описании функции ArrayRemove().

 

Примечание

Если функция используется для массива фиксированного размера, то сам размер массива-приемника dst_array[] не меняется, при этом начиная с позиции dst_start элементы массива-приемника сдвигаются вправо (последние count элементов "выпадают" ), а на освободившееся место происходит копирование элементов из массива-источника.

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

В массиве-источнике элементы копируются, начиная с индекса src_start. Размер массива-источника при этом не изменяется. Добавляемые в массив-приемник элементы не являются ссылками на элементы массива-источника – это означает, что последующие изменения элементов в любом из двух массивов не отражаются на втором.

Пример:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- объявим массив фиксированного размера и заполним значениями
   int array_dest[10];
   for(int i=0;i<10;i++)
     {
      array_dest[i]=i;
     }
   //--- массив-источник   
   int array_source[10];
   for(int i=0;i<10;i++)
     {
      array_source[i]=10+i;
     }
//--- покажем массивы до вставки элементов
   Print("До вызова ArrayInsert()");
   ArrayPrint(array_dest);
   ArrayPrint(array_source);
//--- вставим 3 элемента из массива-источника и покажем новый состав массив-приемника
   ArrayInsert(array_dest,array_source,4,0,3);
   Print("После вызова ArrayInsert()");
   ArrayPrint(array_dest);
/*
   Результат выполнения 
   До вызова ArrayInsert()
   0 1 2 3 4 5 6 7 8 9
   После вызова ArrayInsert()
   0 1 2 3 10 11 12 7 8 9
*/

Смотри также

ArrayRemove, ArrayCopy, ArrayResize, ArrayFree