CArrayObj

CArrayObj sınıfı, CObject ve onun soyundan gelen sınıf örneklerinin işaretçileri için bir dinamik dizi sınıfıdır.

Açıklama

CArrayObj sınıfı, CObject ve onun soyundan gelen sınıfların işaretçilerinden oluşan dinamik dizilerle çalışmaya olanak sağlar. Yani, basit tiplerin çok boyutlu dinamik dizileriyle ve daha karmaşık organize veri yapılarıyla çalışma imkanı sağlar.

Sınıf içerisinde; sıralama, sıralanmış dizide arama, eleman silme/ekleme gibi işlevler yer almaktadır. Ayrıca dosya işlemleri için gereken yöntemler de sınıf içerisinde yer almaktadır.

CArrayObj sınıfı ile çalışmak bir takım incelikler içerir.

Bildirim

   class CArrayObj : public CArray

Başlık

   #include <Arrays\ArrayObj.mqh>

Kalıtım hiyerarşisi

  CObject

      CArray

          CArrayObj

İlk nesil

CIndicators, CSeries

Class Method

Özellikler

 

FreeMode

Bellek yönetim bayrağını alır

FreeMode

Bellek yönetim bayrağını ayarlar

Bellek denetimi

 

Reserve

Dizi boyutunun artırılması için bellek tahsis eder

Resize

Dizi için daha küçük bir boyut ayarlar

Shutdown

Belleği boşaltarak diziyi siler.

Ekleme yöntemleri

 

Add

Dizinin sonuna bir eleman ekler

AddArray

Dizinin sonuna bir eleman ekler

Insert

Dizinin belirtilen konumuna eleman ekler

InsertArray

Başka bir diziden alınan elemanları dizinin belirtilen konumuna ekler

AssignArray

Dizinin elemanlarını başka bir diziden kopyalar

Güncelleme yöntemleri

 

Update

Dizinin belirtilen konumundaki elemanı değiştirir

Shift

Dizi içindeki bir elemanı belirtilen konuma kaydırır

Silme yöntemleri

 

Detach

Dizinin belirtilen konumundaki elemanı alır ve onu diziden kaldırır

Delete

Dizinin belirtilen konumundaki elemanı siler

DeleteRange

Dizinin belirtilen konumundaki elemanlar grubunu siler

Clear

Belleği boşaltmadan dizi elemanlarının tamamını temizler

Erişim yöntemleri

 

At

Dizinin belirtilen konumundaki elemanı alır

Karşılaştırma yöntemleri

 

CompareArray

Diziyi başka bir diziyle karşılaştırır

Sıralı dizi işlemleri

 

InsertSort

Sıralı diziye eleman ekler

Search

Sıralı dizi içinde, belirtilen örneğe eşit olan bir eleman arar

SearchGreat

Sıralı dizi içinde, belirtilen örnekten daha büyük olan bir eleman arar

SearchLess

Sıralı dizi içinde, belirtilen örnekten daha küçük olan bir eleman arar

SearchGreatOrEqual

Sıralı dizi içinde, belirtilen örnekten daha büyük veya eşit olan bir eleman arar

SearchLessOrEqual

Sıralı dizi içinde, belirtilen örnekten daha küçük veya eşit olan bir eleman arar

SearchFirst

Sıralı dizi içinde, belirtilen kriteri sağlayan ilk elemanı arar

SearchLast

Sıralı dizi içinde, belirtilen kriteri sağlayan son elemanı arar

Girdi/çıktı

 

Save

Veri dizisini dosyaya kaydeder

Load

Veri dizisini dosyadan alır

Type

Dizinin tip tanımlayıcısını alır

Sınıftan türetilen yöntemler CObject

Prev, Prev, Next, Next, Compare

Sınıftan türetilen yöntemler CArray

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

Dizilere dair pratik uygulamaların tamamı CObject sınıfının soyundan gelir (standart kütüphanenin tüm sınıfları da buna dahildir).

Örneğin, iki boyutlu diziler için seçeneklere bakalım:

#include <Arrays\ArrayDouble.mqh>
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
  {
   int i,j;
   int first_size=10;
   int second_size=100;
//--- diziyi oluştur
   CArrayObj    *array=new CArrayObj;
   CArrayDouble *sub_array;
//---
   if(array==NULL)
     {
      printf("Nesne oluşturma hatası");
      return;
     }
//--- alt diziler oluştur
   for(i=0;i<first_size;i++)
     {
      sub_array=new CArrayDouble;
      if(sub_array==NULL)
        {
         delete array;
         printf("Nesne oluşturma hatası");
         return;
        }
      //--- diziyi doldur
      for(j=0;j<second_size;j++)
        {
         sub_array.Add(i*j);
        }
      array.Add(sub_array);
     }
//--- dizi oluşturma tamam
   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);
         //--- dizi elemanını kullan
        }
     }
   delete array;
  }

İnce işçilik #

Bu sınıf dinamik belleği denetlemek için mekanizmalara sahiptir, bu nedenle dizi elemanlarıyla çalışılırken dikkatli olunması gerekir.

Bellek yönetimi mekanizması FreeMode (bool) yöntemi kullanılarak açılıp kapatılabilir. Bu mekanizme varsayılan olarak etkin durumdadır.

Dolayısıyla, CArrayObj sınıfıyla çalışmak için iki seçenek mevcuttur:

1. Bellek yönetimi mekanizması devrede. (varsayılan)

Bu seçenekte CArrayObj, elemanların diziden kaldırılmasının ardından belleği boşaltma sorumluluğunu alır. Bu durumda kullanıcı dizi elemanlarını el yordamıyla boşaltmamalıdır.

Örnek:

   int i;
//--- Bir dizi oluştur
   CArrayObj *array=new CArrayObj;
//--- Diziyi doldur
   for(i=0;i<10;i++) array.Add(new CObject);
//--- Birşeyler yap
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- bir elemanla işlem
      . . .
     }
//--- Diziyi elemanlarıyla birlikte kaldır
   delete array;

2. Bellek yönetimi mekanizması devre-dışı.

Bu seçenekte CArrayObj, elemanların diziden kaldırılmasının ardından belleği boşaltma sorumluluğunu almayacaktır. Dolayısıyla, dizi elemanları kullanıcı tarafından serbest bırakılmalıdır.

Örnek:

   int i;
//--- Bir dizi oluştur
   CArrayObj *array=new CArrayObj;
//--- Bellek yönetimi mekanizmasını devre-dışı bırak
   array.FreeMode(false);
//--- Diziyi doldur
   for(i=0;i<10;i++) array.Add(new CObject);
//--- Birşeyler yap
   for(i=0;i<array.Total();i++)
     {
      CObject *object=array.At(i);
      //--- bir elemanla işlem
      . . .
     }
//--- Dizi elemanlarını kaldır
   while(array.Total()) delete array.Detach();
//--- Boş diziyi sil
   delete array;