ArrayRemove

Supprime le nombre spécifié d'éléments du tableau à partir de l'indice spécifié.

bool  ArrayRemove(
   void&        array[],            // tableau de n'importe quel type
   uint         start,              // indice à partir duquel la suppression s'effectue
   uint         count=WHOLE_ARRAY   // nombre d'éléments
   );

Parameters

array[]

[in][out]  Tableau.

start

[in]  Indice à partir duquel les éléments du tableau sont supprimés.

count=WHOLE_ARRAY

[in]  Nombre d'éléments à supprimer. WHOLE_ARRAY signifie tous les éléments à partir de l'indice spécifié jusqu'à la fin du tableau.

Valeur de Retour

Retourne true en cas de succès, sinon false. Pour obtenir des informations sur l'erreur, appelez la fonction GetLastError(). Erreurs possibles :

  • 5052 — ERR_SMALL_ARRAY (valeur start trop grande),
  • 5056 — ERR_SERIES_ARRAY (le tableau ne peut pas être changé, buffer de l'indicateur),
  • 4003 — ERR_INVALID_PARAMETER (valeur count trop grande),
  • 4005 - ERR_STRUCT_WITHOBJECTS_ORCLASS (tableau de taille fixe contenant des objets complexes avec un destructeur),
  • 4006 - ERR_INVALID_ARRAY  (tableau de taille fixe contenant des classes ou des structures avec un destructeur).

 

Note

Si la fonction est utilisée pour un tableau de taille fixe, la taille du tableau ne change pas : la "fin" restante est physiquement copiée à la position start. Pour une compréhension précise du fonctionnement de la fonction, reportez-vous à l'exemple ci-dessous. La copie "physique" signifie que les objets copiés ne sont pas créés en appelant le constructeur ou l'opérateur de copie. Au lieu de cela, la représentation binaire d'un objet est copiée. Pour cette raison, vous ne pouvez pas appliquer la fonction ArrayRemove() au tableau de taille fixe contenant des objets avec un destructeur (l'erreur ERR_INVALID_ARRAY ou ERR_STRUCT_WITHOBJECTS_ORCLASS est activée). Lors de la suppression de ce type d'objet, le destructeur doit être appelé 2 fois — pour l'objet d'origine et pour sa copie.

Vous ne pouvez pas supprimer les éléments de tableaux dynamiques désignés comme buffers d'un indicateur avec la fonction SetIndexBuffer(). Cela résultera en l'erreur ERR_SERIES_ARRAY. Pour les buffers d'indicateurs, toutes les opérations de changement de taille sont effectuées par le sous-système d'exécution du terminal.

Exemple:

//+------------------------------------------------------------------+
//| Fonction de démarrage du script                                     |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- déclare le tableau de taille fixe et remplit les valeurs
   int array[10];
   for(int i=0;i<10;i++)
     {
      array[i]=i;
     }
//--- affiche le tableau avant de supprimer les éléments
   Print("Avant d'appeler ArrayRemove()");
   ArrayPrint(array);
//--- supprime 2 éléments du tableau et affiche le nouvel ensemble
   ArrayRemove(array,4,2);
   Print("Après l'appel à ArrayRemove()");
   ArrayPrint(array);
/*
  Résultat d'exécution :
  Avant d'appeler ArrayRemove()
   0 1 2 3 4 5 6 7 8 9
  Après l'appel à ArrayRemove()
   0 1 2 3 6 7 8 9 8 9
*/

Voir également

ArrayInsert, ArrayCopy, ArrayResize, ArrayFree