MetaTrader 5 herunterladen

CArrayObj

CArrayObj ist eine Klasse des dynamischen Arrays von Zeigern auf Instanzen von CObject-Klasse und ihre geerbten Klassen.

Beschreibung

CArrayObj bietet die Möglichkeit mit einem dynamischen Array von Zeigern auf Instanzen von CObject-Klasse und ihre geerbten Klassen. Dies erlaubt mit mehrdimensionalen dynamischen Arrays von primitiven Datentypen und mit komplexen Datenstrukturen zu arbeiten.

Die Klasse erlaubt Array-Elementen hinzuzufügen/einzufügen/zu löschen, ein Array zu sortieren, in einem Sortierten Array zu suchen. Darüber hinaus sind Methoden für Arbeit mit einer Datei implementiert.

Es gibt bestimmte Arbeitseinzelheiten für die Klasse CArrayObj.

Deklaration

   class CArrayObj : public CArray

Kopf

   #include <Arrays\ArrayObj.mqh>

Vererbungshierarchie

  CObject

      CArray

          CArrayObj

Direkte Ableitungen

CIndicators, CSeries

Gruppen der Klassenmethode

Attribute

 

FreeMode

Erhält den Flag von Speicherverwaltung

FreeMode

Setzt den Flag von Speicherverwaltung

Speicherverwaltung

 

Reserve

Reserviert Speicher, um die Größe des Arrays zu erhöhen

Resize

Setzt eine neue Größe des Arrays (kleinere)

Shutdown

Klärt ein Array mit vollständige Freigabe vom Arrary-Speicher (nicht seiner Elementen).

Das Erstellen eines neuen Elements

 

virtual CreateElement

Erstellt ein neues Element des Arrays an der angegebene Position.

Füllung

 

Add

Fügt ein Element am Ende des Arrays hinzu

AddArray

Am Ende des Arrays fügt Elementen aus einem anderen Array hinzu

Insert

Fügt ein Element in das Array an die angegebene Position ein

InsertArray

Fügt Elementen aus einem anderen Array ins angegebene Array beginnend mit der angegebenen Position ein

AssignArray

Kopiert Elementen aus einem anderen Array ins angegebenen Array

Änderung

 

Update

Ändert ein Element an der angegebenen Position des Arrays

Shift

Verschiebt ein Element aus der angegebenen Array-Position an der angegebenen Verschiebung

Löschen

 

Detach

Erhält ein Element an der angegebene Position und löscht es vom Array

Delete

Löscht ein Element an der angegebene Position des Arrays

DeleteRange

Löscht eine Gruppe von Elementen an der angegebene Position des Arrays

Clear

Löscht alle Elemente des Arrays ohne Speicherfreigabe.

Zugriff

 

At

Erhält ein Element an der angegebene Position des Arrays

Vergleich

 

CompareArray

Vergleicht ein Array mit einem anderen Array

Operationen mit einem sortierten Array

 

InsertSort

Fügt ein Element in ein sortiertes Array ein

Search

Sucht nach einem Element in einem sortierten Array, das gleich dem Muster ist

SearchGreat

Sucht nach einem Element in einem sortierten Array, das größer als das Muster ist

SearchLess

Sucht nach einem Element in einem sortierten Array, das kleiner als das Muster ist

SearchGreatOrEqual

Sucht nach einem Element in einem sortierten Array, das größer als oder gleich dem Muster ist

SearchLessOrEqual

Sucht nach einem Element in einem sortierten Array, das kleiner als oder gleich dem Muster ist

SearchFirst

Sucht nach dem ersten Element in einem sortierten Array, das gleich dem Muster ist

SearchLast

Sucht nach dem letzten Element in einem sortierten Array, das gleich dem Muster ist

Eingabe/Ausgabe

 

virtual Save

Speichert Array-Daten in eine Datei

virtual Load

Lädt Array-Daten aus einer Datei

virtual Type

Erhält die Array-Typ-Identifikator.

Methoden geerbt von der Klasse CObject

Prev, Prev, Next, Next, Compare

Methoden geerbt von der Klasse CArray

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

Arrays von abgeleiteten Klassen von CObject (einschließlich aller Klassen der Standard-Bibliothek) haben praktische Anwendung.

Betrachten wir zum Beispiel die Implementierung einer zweidimensionalen Anordnung:

#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;
  }

 
Arbeitseinzelheiten

Die Klasse hat einen Mechanismus zur dynamischen Speicherverwaltung, so müssen Sie bei der Arbeit mit den Array-Elementen sehr vorsichtig sein.

Der Speicherverwaltungsmechanismus kann durch die Methode FreeMode(bool) aktiviert/deaktiviert werden. Der Speicherverwaltungsmechanismus ist standardmäßig aktiviert.

Dementsprechend gibt es zwei Möglichkeiten für die Arbeit mit der CArrayObj-Klasse:

1. Der Speicherverwaltungsmechanismus ist aktiviert. (Standard)

In diesem Fall übernimmt CArrayObj die Verantwortung für die Speicherfreigabe von Elementen nach der Entfernung aus dem Array. Das Programm des Benutzers soll nicht die Array-Elemente freigeben.

Anwendungsbeispiel:

   int i;
//--- ein Array erstellen
   CArrayObj *array=new CArrayObj;
//--- das Array mit Elementen einfüllen
   for(i=0;i<10;i++) array.Add(new CObject);
//--- etwas tun
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- Operationen mit dem Element
      . . .
     }
//--- das Array mit Elementen löschen
   delete array;

2. Der Speicherverwaltungsmechanismus ist deaktiviert.

In diesem Fall übernimmt CArrayObj keine Verantwortung für die Speicherfreigabe von Elementen nach der Entfernung aus dem Array. Das Programm des Benutzers muss die Array-Elemente freigeben.

Anwendungsbeispiel:

   int i;
//--- ein Array erstellen
   CArrayObj *array=new CArrayObj;
//--- den Speicherverwaltungsmechanismus deaktivieren
   array.FreeMode(false);
//--- das Array mit Elementen einfüllen
   for(i=0;i<10;i++) array.Add(new CObject);
//--- etwas tun
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- Operationen mit dem Element
      . . .
     }
//--- Array-Elemente löschen
   while(array.Total()) delete array.Detach();
//--- Das leere Array löschen
   delete array;