ArrayInsert

Einfügen einer Anzahl von Elementen eines Quellarrays in ein Zielarray, beginnend mit dem angegebenen Index.

bool  ArrayInsert(
   void&        dst_array[],          // Zielarray
   const void&  src_array[],          // Quellarray
   uint         dst_start,            // Index des Zielarrays
   uint         src_start=0,          // Index des Quellarrays
   uint         count=WHOLE_ARRAY     // Anzahl der einzufügenden Elemente
   );

Parameter

dst_array[]

[in][out]  Das Zielarray, dem die Elemente hinzugefügt werden sollen.

src_array[]

[in]  Quellarray, aus dem die Elemente kopiert werden.

dst_start

[in]  Index des Zielarrays, ab dem die Elemente eingefügt werden sollen.

src_start=0

[in]  Index des Quellarrays, ab dem die Elemente aus dem Quellarray kopiert werden sollen.

count

[in]  Anzahl der Elemente, die aus dem Quellarray kopiert werden sollen. WHOLE_ARRAY bedeutet, dass alle Elemente ab dem angegebenen Index des Quellarrays bis zu seinem Ende kopiert werden.

Rückgabewert

Liefert bei Erfolg true, ansonsten false. Um Informationen über den Fehler zu erhalten, rufen Sie die Funktion GetLastError() auf. Mögliche Fehler:

  • 5052 - ERR_SMALL_ARRAY (die Parameter start und/oder count sind falsch eingestellt worden oder das Quellarray src_array[] ist leer),
  • 5056 - ERR_SERIES_ARRAY (das Array kann nicht geändert werden, es ist ein Indikatorpuffer),
  • 4006 - ERR_INVALID_ARRAY (eine Kopie auf sich selbst ist nicht erlaubt, die Arrays sind unterschiedlichen Typs oder es gibt ein Array mit fester Größe, das Klassenobjekte oder Destruktorstrukturen enthält),
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (das Array enthält keine POD-Strukturen, was bedeutet, dass ein einfaches Kopieren unmöglich ist),
  • Fehler, die beim Ändern der Größe des Zielarrays dst_array[] auftreten, finden Sie in der Funktionsbeschreibung von ArrayRemove().

 

Hinweis

Wenn die Funktion für ein Array mit fester Größe verwendet wird, ändert sich die Größe des Zielarrays dst_array[] selbst nicht. Ausgehend von der Position dst_start werden die Elemente des Zielarrays nach rechts verschoben (die überzähligen Elemente "gehen verloren"), während die vom Quellarray kopierten Elemente ihren Platz einnehmen.

Sie können die Elemente nicht in die dynamischen Arrays einfügen, die von der Funktion SetIndexBuffer() als Indikatorpuffer definiert wurden. Bei Indikatorpuffern werden alle Größenänderungsvorgänge vom ausführenden Subsystem des Terminals durchgeführt.

Im Quellarray werden die Elemente ab dem Index src_start kopiert. Die Größe des Quellarrays bleibt unverändert. Die Elemente, die dem Zielarray hinzugefügt werden sollen, sind keine Links zu den Elementen des Quellarrays. Das bedeutet, dass nachfolgende Änderungen der Elemente in einem der beiden Arrays nicht in dem anderen Array berücksichtigt werden.

Beispiel:

//+------------------------------------------------------------------+
//| Skript Programm Start Funktion                                   |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Deklarieren des Arrays mit fixer Größe und der Wertezuweisung
   int array_dest[10];
   for(int i=0;i<10;i++)
     {
      array_dest[i]=i;
     }
   //--- Quellarray  
   int array_source[10];
   for(int i=0;i<10;i++)
     {
      array_source[i]=10+i;
     }
//--- Anzeigen des Arrays vor dem Einfügen der Elemente
   Print("Vor dem Aufruf von ArrayInsert()");
   ArrayPrint(array_dest);
   ArrayPrint(array_source);
//--- Einfügen von 3 Elementen in das Array und dessen Darstellung danach
   ArrayInsert(array_dest,array_source,4,0,3);
   Print("Nach dem Aufruf von ArrayInsert()");
   ArrayPrint(array_dest);
/*
  Ausführungsergebnis:
   Vor dem Aufruf von ArrayInsert()
   0 1 2 3 4 5 6 7 8 9
   Nach dem Aufruf von ArrayInsert()
   0 1 2 3 10 11 12 7 8 9
*/

Siehe auch

ArrayRemove, ArrayCopy, ArrayResize, ArrayFree