ArrayRemove

Rimuove il numero specificato di elementi dall'array iniziando con un indice specificato.

bool  ArrayRemove(
   void&        array[],            // array di qualsiasi tipo
   uint         start,              // indice da cui parte la rimozione
   uint         count=WHOLE_ARRAY   // numero di elementi
   );

Parametri

array[]

[in][out]  Array.

start

[in] Indice, a partire dal quale vengono rimossi gli elementi dell'array.

count=WHOLE_ARRAY

[in] Numero di elementi rimossi. Il valore WHOLE_ARRAY significa la rimozione di tutti gli elementi dall'indice specificato fino alla fine dell'array.

Valore di ritorno

Restituisce true se ha successo, altrimenti - false. Per ottenere informazioni sull'errore, chiamare la funzione GetLastError(). Possibili errori:

  • 5052 – ERR_SMALL_ARRAY (valore start troppo grande),
  • 5056 – ERR_SERIES_ARRAY (l'array non può essere modificato, buffer indicatore),
  • 4003 – ERR_INVALID_PARAMETER (valore count troppo grande),
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (array a grandezza fissa contenente oggetti complessi con il distruttore),
  • 4006 - ERR_INVALID_ARRAY  (array a grandezza fissa contenente strutture o oggetti della classe con un distruttore).

 

Nota

Se la funzione viene utilizzata per un array di grandezza fissa, la grandezza dell'array non cambia: la "coda" rimanente viene fisicamente copiata nella posizione start. Per una comprensione accurata di come lavora la funzione, vedere l'esempio di seguito. Copia "fisica" significa che gli oggetti copiati non vengono creati chiamando il costruttore o l'operatore di copia. Invece, viene copiata la rappresentazione binaria dell'oggetto. Per questo motivo, non è possibile applicare la funzione ArrayRemove() all'array di grandezza fissa contenente oggetti con il distruttore (l'errore ERR_INVALID_ARRAY o ERR_STRUCT_WITHOBJECTS_ORCLASS viene attivato). Quando si rimuove un oggetto di questo tipo, il distruttore dovrebbe essere chiamato due volte - per l'oggetto originale e per la sua copia.

Non è possibile rimuovere elementi dagli array dinamici designati come buffer indicatore dalla funzione SetIndexBuffer(). Ciò provocherà l'errore ERR_SERIES_ARRAY. Per i buffer indicatori, tutte le operazioni di modifica della grandezza vengono eseguite dal sottosistema di esecuzione del terminale.

Esempio:

//+------------------------------------------------------------------+
//| Funzione Start del programma di script |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- dichiara l'array a dimensione fissa e riempie i valori
   int array[10];
   for(int i=0;i<10;i++)
     {
      array[i]=i;
     }
//--- mostra l'array prima di rimuovere gli elementi
   Print("Prima di chiamare ArrayRemove()");
   ArrayPrint(array);
// --- elimina 2 elementi dall'array e mostra il nuovo set
   ArrayRemove(array,4,2);
   Print("Dopo aver chiamato ArrayRemove()");
   ArrayPrint(array);
/*
  Risultato dell'esecuzione
  Prima di chiamare ArrayRemove()
   0 1 2 3 4 5 6 7 8 9
  Dopo aver chiamato ArrayRemove()
   0 1 2 3 6 7 8 9 8 9
*/

Guarda anche

ArrayInsert, ArrayCopy, ArrayResize, ArrayFree