ArrayRemove

Elimina de la matriz el número indicado de elementos, comenzando por el índice indicado.

bool  ArrayRemove(
   void&        array[],            // matriz de cualquier tipo
   uint         start,              // desde qué índice comenzamos a eliminar
   uint         count=WHOLE_ARRAY   // número de elementos
   );

Parámetros

array[]

[in][out]  Matriz.

start

[in]  Índice desde el que se comienza a eliminar los elementos de la matriz.

count=WHOLE_ARRAY

[in]  Número de elementos a eliminar. El valor WHOLE_ARRAY indica la eliminación de todos los elementos desde el índice establecido hasta el final de la matriz.

Valor retornado

Retorna true en caso de éxito, de lo contrario, false. Para obtener información sobre el error, es necesario llamar la función GetLastError(). Posibles errores:

  • 5052 — ERR_SMALL_ARRAY (el valor start es demasiado grande),
  • 5056 — ERR_SERIES_ARRAY (la matriz no puede modificarse, búfer de indicador),
  • 4003 — ERR_INVALID_PARAMETER (el valor count es demasiado grande),
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (matriz de tamaño fijo, que contiene objetos complejos con destructor),
  • 4006 - ERR_INVALID_ARRAY  (matriz de tamaño fijo, que contiene objetos de estructuras o clases con destructor).

 

Observación

Si la función se usa para una matriz de tamaño fijo, el propio tamaño de la matriz no cambia: en este caso, además, tiene lugar el copiado físico de la "cola" restante en la posición start. Para comprender exactamente el funcionamiento de la función, mire el ejemplo de abajo. El copiado "físico" significa que los objetos copiados no se crean con la ayuda de la llamada de un constructor u operador de copiado, sino que simplemente sucede el copiado de la representación binaria del objeto. Precisamente por este motivo se prohíbe aplicar la función ArrayRemove() a una matriz de tamaño fijo que contenga objetos con destructor (se mostrará el error ERR_INVALID_ARRAY o ERR_STRUCT_WITHOBJECTS_ORCLASS). Así, al eliminar este objeto el destructor deberá ser llamado dos veces: para el objeto original y para su copia.

No es posible eliminar los elementos de las matrices dinámicas designadas como búferes de indicador con la función SetIndexBuffer(), esto provocará la aparición del error ERR_SERIES_ARRAY. Para los búferes de indicador, todas las operaciones de cambio de tamaño son realizadas por el subsistema ejecutor del terminal.

Ejemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declaramos una matriz de tamaño fijo y rellenamos con valores
   int array[10];
   for(int i=0;i<10;i++)
     {
      array[i]=i;
     }
//--- mostramos la matriz antes de eliminar los elementos
   Print("Antes de llamar ArrayRemove()");
   ArrayPrint(array);
//--- eliminamos 2 elementos de la matriz y mostramos la nueva composición
   ArrayRemove(array,4,2);
   Print("Después de llamar ArrayRemove()");
   ArrayPrint(array);
/*
  Resultado de la ejecución:
  Antes de llamar ArrayRemove()
   0 1 2 3 4 5 6 7 8 9
  Después de llamar ArrayRemove()
   0 1 2 3 6 7 8 9 8 9
*/

Mire también

ArrayInsert, ArrayCopy, ArrayResize, ArrayFree