CArrayObj

La clase CArrayObj proporciona un array dinámico de punteros a instancias de la clase CObject y a sus clases hijas.

Descripción

La clase CArrayObj permite trabajar con un array dinámico de punteros a instancias de CObject y a sus clases hijas. Esto brinda la posibilidad de trabajar con arrays dinámicos multidimensionales de tipos de datos primitivos, y realizar cosas más complejas con estructuras de datos organizadas.

Esta clase permite añadir, insertar y borrar elementos del array, así como ordenarlos y buscarlos en arrays ordenados. Además, los métodos implementados permiten trabajar con archivos.

La clase CArrayObj tiene algunas sutilezas.

Declaración

   class CArrayObj : public CArray

Título

   #include <Arrays\ArrayObj.mqh>

Jerarquía de herencia

  CObject

      CArray

          CArrayObj

Descendientes directos

CIndicators, CSeries

Método de la clase

Atributos

 

FreeMode

Obtiene la bandera de gestión de memoria

FreeMode

Establece la bandera de gestión de memoria

Control de memoria

 

Reserve

Asigna memoria para incrementar el tamaño del array

Resize

Establece un nuevo tamaño, más pequeño, del array

Shutdown

Borra el array con un array totalmente exento de memoria (sin elementos).

Métodos de adición

 

Add

Añade un elemento al final del array

AddArray

Añade un elemento al final del array

Insert

Inserta un elemento en la posición especificada

InsertArray

Inserta en la posición especificada un array de elementos de otro array

AssignArray

Copia los elementos de otro array

Métodos de actualización

 

Update

Cambia el elemento de la posición especificada del array

Shift

Mueve un ítem de una posición dada a la especificada por el desplazamiento

Métodos de borrado

 

Detach

Obtiene el elemento de la posición especificada y lo borra del array

Delete

Borra el elemento de la posición especificada

DeleteRange

Borra el grupo de elementos de la posición especificada

Clear

Borra todos los elementos del array sin liberar la memoria

Métodos de acceso

 

At

Obtiene el elemento de la posición especificada

Métodos de comparación

 

CompareArray

Compara el array con otro

Operaciones de ordenación

 

InsertSort

Inserta el elemento en el array ordenado

Búsqueda

Busca en el array ordenado un elemento igual al especificado

SearchGreat

Busca en el array ordenado el elemento mayor que el especificado

SearchLess

Busca en el array ordenado el elemento menor que el especificado

SearchGreatOrEqual

Busca en el array ordenado el elemento mayor o igual que el especificado

SearchLessOrEqual

Busca en el array ordenado el elemento menor o igual que el especificado

SearchFirst

Busca en el array ordenado el primer elemento igual al especificado

SearchLast

Busca en el array ordenado el último elemento igual al especificado

Entrada/salida

 

Save

Guarda los datos del array en el archivo

Load

Carga los datos en el array a partir del archivo

Type

Obtiene el identificador de tipo del array

Métodos heredados de la clase CObject

Prev, Prev, Next, Next, Compare

Métodos heredados de la clase CArray

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

Las aplicaciones prácticas de los arrays descienden de la clase CObject (incluyendo todas las clases de la Librería Estándar).

Por ejemplo, consideremos un array de dos dimensiones:

#include <Arrays\ArrayDouble.mqh>
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   int i,j;
   int first_size=10;
   int second_size=100;
//--- crea el array
   CArrayObj    *array=new CArrayObj;
   CArrayDouble *sub_array;
//---
   if(array==NULL)
     {
      printf("Error en la creación del objeto");
      return;
     }
//--- crea subarrays
   for(i=0;i<first_size;i++)
     {
      sub_array=new CArrayDouble;
      if(sub_array==NULL)
        {
         delete array;
         printf("Error en la creación del objeto");
         return;
        }
      //--- llena el array
      for(j=0;j<second_size;j++)
        {
         sub_array.Add(i*j);
        }
      array.Add(sub_array);
     }
//--- el array se crea correctamente
   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);
         //--- utiliza el elemento del array
        }
     }
   delete array;
  }

Sutilezas #

La clase tiene un mecanismo de control de memoria dinámica, de modo que tenga cuidado cuando tenga que manejar los elementos del array.

El mecanismo de gestión de la memoria se puede activar y desactivar utilizando el método FreeMode (bool). El mecanismo está activado de forma predeterminada.

En consecuencia, hay dos opciones para trabajar con la clase CArrayObj:

1. Activar el mecanismo de gestión de la memoria. (predeterminado)

En este caso, CArrayObj se responsabiliza de liberar los elementos de la memoria después de eliminarse del array. En el siguiente programa, el usuario no debe liberar los elementos del array.

Ejemplo:

   int i;
//--- Crea un array
   CArrayObj *array=new CArrayObj;
//--- Inserta los elementos en el array
   for(i=0;i<10;i++) array.Add(new CObject);
//--- Hace algo
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- Acción con un elemento
      . . .
     }
//--- Borrar el array con los elementos
   delete array;

2. El mecanismo de gestión de memoria está desactivado.

En este caso, CArrayObj se responsabiliza de liberar la memoria utilizada por los elementos después de borrarlos del array. En este programa, el usuario debe liberar los elementos del array.

Ejemplo:

   int i;
//--- Crea un array
   CArrayObj *array=new CArrayObj;
//--- Desactiva el mecanismo de gestión de memoria
   array.FreeMode(false);
//--- Inserta los elementos en el array
   for(i=0;i<10;i++) array.Add(new CObject);
//--- Hace algo
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- Acción con un elemento
      . . .
     }
//--- Borra los elementos del array
   while(array.Total()) delete array.Detach();
//--- Borra el array vacío
   delete array;