ArrayRemove

Remove o número especificado de elementos da matriz, iniciando no índice especificado.

bool  ArrayRemove(
   void&        array[],            // matriz de qualquer tipo
   uint         start,              // índice a partir do qual é iniciada a remoção
   uint         count=WHOLE_ARRAY   // número de elementos
   );

Parâmetros

array[]

[in][out]  Matriz.

start

[in]  Índice a partir do qual são excluídos os elementos da matriz.

count=WHOLE_ARRAY

[in]  Número de elementos para excluir. O valor WHOLE_ARRAY indica a remoção de todos os elemento, do índice especificado até o final da matriz.

Valor retornado

Retorna true em caso de sucesso, caso contrário, false. Para obter informações de erro, chame a função GetLastError(). Possíveis erros:

  • 5052 — ERR_SMALL_ARRAY (o valor start é muito grande),
  • 5056 — ERR_SERIES_ARRAY (a matriz não pode ser alterada, buffer de indicador),
  • 4003 — ERR_INVALID_PARAMETER (o valor count é muito grande),
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (matriz de tamanho fixo que contém objetos complexos com um destruidor),
  • 4006 - ERR_INVALID_ARRAY  (matriz de tamanho fixo que contém objetos de estruturas ou de classes com destruidores).

 

Observação

Se a função é usada para uma matriz de tamanho fixo, o tamanho da matriz em si não muda: neste caso, a “cauda” remanescente é fisicamente copiada para a posição start. Para um entendimento preciso de como funciona a função, veja o exemplo abaixo. Cópia “física” significa que os objetos copiados não são criados chamando o construtor ou o operador de cópia, mas, sim, simplesmente copiando a representação binária do objeto. É por esse motivo que é proibido aplicar a função ArrayRemove() à uma matriz de tamanho fixo contendo objetos com um destruidor (é ativado ERR_INVALID_ARRAY ou ERR_STRUCT_WITHOBJECTS_ORCLASS) Como ao remover tal objeto, o destruidor deve ser chamado duas vezes - para o objeto inicial e para sua cópia.

É impossível excluir elementos de matrizes dinâmicas, atribuídas como buffers de indicador, através da função SetIndexBuffer(), isso resultará no erro ERR_SERIES_ARRAY. Para buffers de indicador, todas as operações de redimensionamento são executadas pelo subsistema em execução do terminal.

Exemplo:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- declara uma matriz de tamanho fixo e preenche com valores
   int array[10];
   for(int i=0;i<10;i++)
     {
      array[i]=i;
     }
//--- mostra uma matriz antes de remover elementos
   Print("Antes de chamar a ArrayRemove()");
   ArrayPrint(array);
//--- remove 2 elementos da matriz e mostra a nova composição
   ArrayRemove(array,4,2);
   Print("Depois de chamar a ArrayRemove()");
   ArrayPrint(array);
/*
  Resultado da execução:
  Antes de chamar a ArrayRemove()
   0 1 2 3 4 5 6 7 8 9
  Depois de chamar a ArrayRemove()
   0 1 2 3 6 7 8 9 8 9
*/

Veja também

ArrayInsert, ArrayCopy, ArrayResize, ArrayFree