CArrayObj

La Classe CArrayObj è una classe di array dinamico di puntatori ad istanze di CObject e delle sue classi derivate.

Descrizione

La Classe CArrayObj offre la possibilità di lavorare con un array dinamico di puntatori a istanze di CObject e di sue classi derivate. Questo permette di lavorare sia con array dinamici multidimensionali di tipi di dati primitivi e con strutture di dati che hanno un'organizzazione più complessa di dati.

La classe consente di aggiungere/inserire/cancellare elementi di un array, eseguire l'ordinamento di un array, e la ricerca in un array ordinato. Inoltre, sono stati implementati i metodi di lavoro con i file.

Ci sono certe sottigliezze della classe CArrayObj.

Dichiarazione

   class CArrayObj : public CArray

Titolo

   #include <Arrays\ArrayObj.mqh>

Gerarchia di ereditarietà

  CObject

      CArray

          CArrayObj

Discendenti diretti

CIndicators, CSeries

I Metodi della Classe per Gruppi

Attributi

 

FreeMode

Ottiene la flag della gestione della memoria

FreeMode

Imposta la flag di gestione della memoria

Controllo della memoria

 

Reserve

Alloca memoria per aumentare la grandezza dell'array

Ridimensiona

Imposta una nuova (più piccolo) grandezza dell'array

Shutdown

Cancella l'array con piena deallocazione della sua memoria (ma non i suoi elementi).

Creazione di un nuovo elemento

 

virtual CreateElement

Crea un nuovo elemento di un array nella posizione specificata

Aggiunta metodi

 

Add

Aggiunta elemento alla fine dell'array

AddArray

Aggiunta elemento alla fine dell'array

Insert

Inserisce un elemento alla posizione specificata nell array

InsertArray

Inserisce in un array elementi di un altro array dalla posizione specificata

AssignArray

Copia gli elementi di un array in un altro

Update methods

 

Aggiorna

Cambia l'elemento alla posizione array specificata

Shift

Sposta un elemento da una data posizione nell'array per l'offset specificato

Metodi eliminazione

 

Detach

Ottiene l'elemento dalla posizione specificata e lo rimuove dall'array

Delete

Rimuove l'elemento dalla posizione specificata dell'arrat

DeleteRange

Elimina un gruppo di elementi dalla posizione specificata dell'array

Clear

Rimuovere tutti gli elementi dell'array senza il rilascio della memoria array

Metodi d'accesso

 

At

Ottiene l'elemento dalla posizione specificata dell'array

Confronta i metodi

 

CompareArray

Confronta l'array con un altro

Operazioni array ordinato

 

InsertSort

Inserisce un elemento in un array ordinato

Ricerca

Cerca un elemento uguale al campione(al sample) in un array ordinato

SearchGreat

Cerca un elemento con un valore superiore al valore del campione(il sample) in un array ordinato

SearchLess

Ricerca di un elemento con un valore inferiore rispetto al valore del campione nell'array ordinato

SearchGreatOrEqual

Ricerca di un elemento con un valore maggiore o uguale al valore del campione nell'array ordinato

SearchLessOrEqual

Ricerca di un elemento con un valore inferiore o uguale al valore del campione nell'array ordinato

SearchFirst

Ricerche il primo elemento pari al campione nell' array ordinato

SearchLast

Ricerche l'ultimo elemento pari al campione nell'array ordinato

Input/output

 

Save

Salva array di dati nel file

Load

Carica i dati dell'array dal file

Type

Ottiene il tipo identificatore array

Metodi ereditati dalla classe CObject

Prev, Prev, Next, Next, Compare

Metodi ereditati dalla classe CArray

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

Gli array della classe CObject hanno applicazione pratica (comprese tutte le classi della libreria standard).

Ad esempio, considerare le opzioni per array bidimensionali:

#include <Arrays\ArrayDouble.mqh>
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   int i,j;
   int first_size=10;
   int second_size=100;
//--- crea array
   CArrayObj    *array=new CArrayObj;
   CArrayDouble *sub_array;
//---
   if(array==NULL)
     {
      printf("Errore creazione oggetto");
      return;
     }
//--- crea subarrays
   for(i=0;i<first_size;i++)
     {
      sub_array=new CArrayDouble;
      if(sub_array==NULL)
        {
         delete array;
         printf("Errore creazione oggetto");
         return;
        }
      //--- riempie array
      for(j=0;j<second_size;j++)
        {
         sub_array.Add(i*j);
        }
      array.Add(sub_array);
     }
//--- crea array OK
   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);
         //--- use elementi array
        }
     }
   delete array;
  }

Subtleties #

La classe ha un meccanismo di controllo della memoria dinamica, quindi state attenti quando si lavora con elementi dell'array.

Il meccanismo di gestione della memoria può essere attivato/disattivato con il metodo FreeMode (bool). Per impostazione predefinita, il meccanismo è attivato.

Di conseguenza, ci sono due opzioni per trattare con la classe CArrayObj:

1. Meccanismo di gestione della memoria è abilitata. (default)

In questo caso, CArrayObj assume responsabilità di rilasciare la memoria utilizzata per gli elementi dopo la loro rimozione dall'array. Un programma personalizzato non dovrebbe rilasciare gli elementi dell'array.

Esempio:

   int i;
//--- crea un array
   CArrayObj *array=new CArrayObj;
//--- riempie elementi dell' array
   for(i=0;i<10;i++) array.Add(new CObject);
//--- fa qualcosa
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- azioni eseguite con l'elemento
      . . .
     }
//--- rimuove l'array con gli elementi
   delete array;

2. Il meccanismo di gestione della memoria è disabilitato.

In questo caso, CArrayObj non è responsabile per deallocazione della memoria degli elementi dopo la loro rimozione dall' array. Inoltre, il programma utente deve rilasciare gli elementi dell'array.

Esempio:

   int i;
//--- crea un array
   CArrayObj *array=new CArrayObj;
//--- disabilita il meccanismo di gestione della memoria
   array.FreeMode(false);
//--- riempie array con elementi
   for(i=0;i<10;i++) array.Add(new CObject);
//--- fa qualcosa
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- azioni eseguite con l'elemento
      . . .
     }
//--- rimuove elementi array
   while(array.Total()) delete array.Detach();
//--- rimuove array vuoto
   delete array;