CArrayObj

CArrayObj é uma classe de array dinâmico de ponteiros para instâncias de CObject e seus herdeiros.

Descrição

A classe CArrayObj possibilita trabalhar com um array dinâmico de ponteiros para instâncias de CObject e seus herdeiros. Isto dá a possibilidade de trabalhar como arrays dinâmicos multidimensionais de tipos de dados primitivos e para estruturas de dados organizados mais difíceis.

Na classe implementada existe a possibilidade de adicionar/inserir/excluir elementos em: array, ordenação de array e pesquisando em array ordenado. Além disto, implementa métodos para trabalhar com o arquivo.

Existem certas sutilezas na classe CArrayObj.

Declaração

   class CArrayObj : public CArray

Título

   #include <Arrays\ArrayObj.mqh>

Hierarquia de herança

  CObject

      CArray

          CArrayObj

Descendentes diretos

CIndicators, CSeries

Método de Classe

Atributos

 

FreeMode

Obtém o flag de gerenciamento de memória

FreeMode

Define o flag de gerenciamento de memória

Controle de memória

 

Reserve

Memória alocada para aumentar o tamanho do array

Resize

Define um novo tamanho (mais pequeno) do array

Shutdown

Limpa o array com uma isenção total do array de memória (não do elemento).

Métodos para adicionar

 

Add

Adiciona um elemento para o final do array

ddArray

Adiciona um elemento para o final do array

Insert

Insere um elemento no array para uma posição específica

InsertArray

Insere um array de elementos a partir de outro array com posição específica

AssignArray

Copia os elementos array a partir de outro array

Métodos de atualização

 

Update

Altera o elemento na posição do array determinado

Shift

Desloca um item a partir de uma dada posição no array para um deslocamento determinado

Métodos para excluir

 

Detach

Obtém o elemento a partir da posição determinada e remove-o a partir do array

Delete

Remove o elemento a partir de uma posição específica no array

DeleteRange

Exclui um grupo de elementos a partir de uma posição específica no array

Clear

Remove todos os elementos do array, sem a liberação do array de memória

Métodos de acesso

 

At

Obtém o elemento a partir de uma posição dada no array

Métodos para comparar

 

CompareArray

Compara o array com outro array

Operações de array ordenado

 

InsertSort

Elemento de inserções em array ordenado

Pesquisa

Procura por um elemento igual ao modelo em array ordenado

SearchGreat

Procura por um elemento de mais amostras em array ordenado

SearchLess

Procura por um elemento menor do que a amostra em array ordenado

SearchGreatOrEqual

Procura por um elemento maior ou igual ao modelo em array ordenado

SearchLessOrEqual

Procura por um elemento menor ou igual ao modelo apresentado em array ordenado

SearchFirst

Localiza o primeiro elemento igual ao modelo em array ordenado

SearchLast

Localiza o último elemento igual ao modelo em array ordenado

Entrada/saída

 

Save

Salva array de dados no arquivo

Load

Carrega array de dados a partir de um arquivo

Type

Obtém o identificador do tipo do array

Métodos herdados da classe CObject

Prev, Prev, Next, Next, Compare

Métodos herdados da classe CArray

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

A aplicação prática dos arrays são descendentes da classe CObject (incluindo todas as classes da biblioteca padrão).

Por exemplo, considere as opções para o array bidimensional:

#include <Arrays\ArrayDouble.mqh>
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   int i,j;
   int first_size=10;
   int second_size=100;
//--- create array
   CArrayObj    *array=new CArrayObj;
   CArrayDouble *sub_array;
//---
   if(array==NULL)
     {
      printf("Object create error");
      return;
     }
//--- create subarrays
   for(i=0;i<first_size;i++)
     {
      sub_array=new CArrayDouble;
      if(sub_array==NULL)
        {
         delete array;
         printf("Object create error");
         return;
        }
      //--- fill array
      for(j=0;j<second_size;j++)
        {
         sub_array.Add(i*j);
        }
      array.Add(sub_array);
     }
//--- create 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 array element
        }
     }
   delete array;
  }

Sutilezas #

A classe tem um mecanismo para controlar a dinâmica de memória, por isso tenha cuidado ao trabalhar com elementos do array.

Mecanismo de gerenciamento de memória pode ser ligado / desligado através do método FreeMode (bool). Por padrão, o mecanismo é ativado.

Por conseguinte, existem duas opções para lidar com a classe CArrayObj classe:

1. Mecanismo de gerenciamento de memória está ativada. (padrão)

Neste caso, a CArrayObj assume a responsabilidade de liberar os elementos de memória após a sua remoção do array. Neste programa o usuário não deve liberar os elementos do array.

Exemplo

   int i;
//--- Create an array
   CArrayObj *array=new CArrayObj;
//--- Fill array elements
   for(i=0;i<10;i++) array.Add(new CObject);
//--- Do something
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- Action with an element
      . . .
     }
//--- Remove the array with the elements
   delete array;

2. Mecanismo de gerenciamento de memória está desativado.

Neste caso, a CArrayObj não assume a responsabilidade para liberar os elementos de memória após a sua remoção do array. Neste programa o usuário deve liberar os elementos do array.

Exemplo

   int i;
//--- Create an array
   CArrayObj *array=new CArrayObj;
//--- Disable the mechanism of memory management
   array.FreeMode(false);
//--- Fill array elements
   for(i=0;i<10;i++) array.Add(new CObject);
//--- Do something
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- Action with an element
      . . .
     }
//--- Remove array elements
   while(array.Total()) delete array.Detach();
//--- Remove empty array
   delete array;