ArrayRemove

Entfernt die angegebene Anzahl von Elementen im Array, beginnend mit dem angegebenen Index.

bool  ArrayRemove(
   void&        array[],            // Array irgendeines Typs
   uint         start,              // Startindex für das Entfernen
   uint         count=WHOLE_ARRAY   // Anzahl der Elemente
   );

Parameter

array[]

[in][out]  Array.

Start

[in]  Index, ab dem die Elemente entfernt werden sollen.

count=WHOLE_ARRAY

[in]  Anzahl der zu entfernenden Elemente. WHOLE_ARRAY bedeutet, dass alle Elemente ab dem angegebenen Index bis zum Ende des Array entfernt 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 (Zu großer Wert für start),
  • 5056 - ERR_SERIES_ARRAY (das Array kann nicht geändert werden, es ist ein Indikatorpuffer),
  • 4003 – ERR_INVALID_PARAMETER (Zu großer Wert für count),
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (Array mit fixer Größe, das komplexe Objekte mit einem Destruktor enthält),
  • 4006 - ERR_INVALID_ARRAY  (Array mit fixer Größe, das Strukturen oder Klassenobjekte mit einem Destruktor enthält).

 

Hinweis

Wenn die Funktion für ein Array mit fester Größe verwendet wird, ändert sich die Array-Größe nicht: Der verbleibende "Rest" wird physisch an die Position start kopiert. Zum genauen Verständnis der Funktionsweise der Funktion betrachten Sie das folgende Beispiel. "Physisches" Kopieren bedeutet, dass die kopierten Objekte nicht durch Aufruf des Konstruktors oder des Kopieroperators erzeugt werden. Stattdessen wird die binäre Darstellung eines Objekts kopiert. Aus diesem Grund können Sie die Funktion ArrayRemove() nicht auf das Array mit fester Größe anwenden, das Objekte mit dem Destruktor enthält (die Fehler ERR_INVALID_ARRAY oder ERR_STRUCT_WITHOBJECTS_ORCLASS werden gesetzt). Beim Entfernen eines solchen Objekts würde der Destruktor zweimal aufgerufen werden - für das Originalobjekt und seine Kopie.

Sie können keine Elemente aus dynamischen Arrays entfernen, die von der Funktion SetIndexBuffer() als Indikatorpuffer definiert wurden. Dies führt zum Fehler ERR_SERIES_ARRAY. Bei Indikatorpuffern werden alle Größenänderungsvorgänge vom ausführenden Subsystem des Terminals durchgeführt.

Beispiel:

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

Siehe auch

ArrayInsert, ArrayCopy, ArrayResize, ArrayFree