CArrayObj

La classe CArrayObj est la classe des tableaux dynamiques de pointeurs vers des instances de CObject et de ses descendants.

Description

La classe CArrayObj permet de travailler avec un tableau dynamique de pointeurs vers des instances de CObject et de ses descendants. Ceci permet de travailler comme avec des tableaux de types de données primitifs à plusieurs dimensions.

La classe implémente les fonctions d'ajout, d'insertion et de suppression des éléments dans un tableau, dans un tableau trié, et la recherche dans un tableau trié. Elle implémente également les méthodes permettant de travailler avec les fichiers.

Il y a quelques subtilités de la class CArrayObj.

Déclaration

   class CArrayObj : public CArray

Titre

   #include <Arrays\ArrayObj.mqh>

Hiérarchie d'héritage

  CObject

      CArray

          CArrayObj

Descendants directs

CIndicators, CSeries

Méthode de Classe

Attributs

 

FreeMode

Retourne le flag de gestion de la mémoire

FreeMode

Définit le flag de gestion de la mémoire

Contrôle de la mémoire

 

Reserve

Alloue la mémoire pour augmenter la taille du tableau

Resize

Définit une nouvelle taille du tableau (plus petite)

Shutdown

Réinitialise le tableau et désalloue toute la mémoire.

Méthode d'ajout

 

Add

Ajoute un élément à la fin du tableau

AddArray

Ajoute un élément à la fin du tableau

Insert

Insére un élément dans le tableau à la position spécifiée

InsertArray

Insére un tableau d'éléments à la position spécifiée

AssignArray

Copie les éléments d'un autre tableau

Méthodes de mise à jour

 

Update

Met à jour l'élément situé à la position spécifiée

Shift

Déplace un élément du tableau depuis la position donnée et d'un décalage donné

Méthodes de suppression

 

Detach

Retourne l'élément du tableau situé à la position spécifiée et l'enlève du tableau

Delete

Supprime l'élément du tableau situé à la position spécifiée

DeleteRange

Supprime un groupe d'éléments du tableau à partir de la position spécifiée

Clear

Supprime tous les éléments du tableau sans désallouer la mémoire

Méthodes d'accès

 

At

Retourne l'élément du tableau situé à la position spécifiée

Méthodes de comparaison

 

CompareArray

Compare le tableau avec un autre tableau

Opérations avec les tableaux triés

 

InsertSort

Insére un élément dans un tableau trié

Search

Recherche un élément du tableau égal au modèle donné

SearchGreat

Cherche un élément supérieur à celui donné dans un tableau trié

SearchLess

Cherche un élément inférieur à celui donné dans un tableau trié

SearchGreatOrEqual

Cherche un élément supérieur ou égal à celui donné dans un tableau trié

SearchLessOrEqual

Cherche un élément inférieur ou égal à celui donné dans un tableau trié

SearchFirst

Cherche le premier élément égal au modèle dans un tableau trié

SearchLast

Cherche le dernier élément égal au modèle dans un tableau trié

Entrée/Sortie

 

Save

Sauvegarde le tableau de données dans un fichier

Load

Charge les données du tableau depuis un fichier.

Type

Retourne l'identifiant du type du tableau

Méthodes héritées de la classe CObject

Prev, Prev, Next, Next, Compare

Méthodes héritées de la classe CArray

Step, Step, Total, Available, Max, IsSorted, SortMode, Clear, Sort

Une application pratique des tableaux sont les descendants de la classe CObject (incluant toutes les classes de la bibliothèque standard).

Par exemple, considérons un tableau à 2 dimensions :

#include <Arrays\ArrayDouble.mqh>
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   int i,j;
   int first_size=10;
   int second_size=100;
//--- création du tableau
   CArrayObj    *array=new CArrayObj;
   CArrayDouble *sub_array;
//---
   if(array==NULL)
     {
      printf("Object create error");
      return;
     }
//--- création des sous-tableaux
   for(i=0;i<first_size;i++)
     {
      sub_array=new CArrayDouble;
      if(sub_array==NULL)
        {
         delete array;
         printf("Object create error");
         return;
        }
      //--- remplissage du tableau
      for(j=0;j<second_size;j++)
        {
         sub_array.Add(i*j);
        }
      array.Add(sub_array);
     }
//--- tableau créé avec succès
   for(i=0;i<first_size;i++)
     {
      sub_array=array.At(i);
      for(j=0;j<second_size;j++)
        {
         double element=sub_array.At(j);
         //--- utilisation de l'élément du tableau
        }
     }
   delete array;
  }

Subtilités #

La classe possède un mécanisme de contrôle dynamique de la mémoire, veillez donc à faire attention lorsque vous travaillez avec des éléments dans un tableau.

Le mécanisme de gestion de la mémoire peut être activé ou désactivé en utilisant la méthode FreeMode (bool). Par défaut, le mécanisme est activé.

De la même façon, il y a deux options de gestion de la classe CArrayObj :

1. Mécanisme de gestion de la mémoire activé. (par défaut)

Dans ce cas, la classe CArrayObj prend la responsabilité de libérer les éléments de la mémoire après leur suppression du tableau. Dans ce mode, l'utilisateur ne devrait pas libérer les éléments d'un tableau.

Exemple :

   int i;
//--- Création d'un tableau
   CArrayObj *array=new CArrayObj;
//--- Remplissage des éléments du tableau
   for(i=0;i<10;i++) array.Add(new CObject);
//--- Fait quelque chose
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- Action sur un élément
      . . .
     }
//--- Supprime le tableau et ses éléments
   delete array;

2. Mécanisme de gestion de la mémoire désactivé.

Dans ce cas, la classe CArrayObj ne prend pas la responsabilité de libérer les éléments de la mémoire après leur suppression du tableau. Dans ce mode, l'utilisateur doit libérer les éléments d'un tableau.

Exemple :

   int i;
//--- Création d'un tableau
   CArrayObj *array=new CArrayObj;
//--- Désactive le mécanisme de la gestion de la mémoire
   array.FreeMode(false);
//--- Remplissage des éléments du tableau
   for(i=0;i<10;i++) array.Add(new CObject);
//--- Fait quelque chose
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- Action sur un élément
      . . .
     }
//--- Supprime les éléments du tableau
   while(array.Total()) delete array.Detach();
//--- Supprime le tableau vide
   delete array;