Aracılığıyla paylaş


atl koleksiyon sınıfları

atl saklamak ve verilere erişmek için pek çok sınıf sunar.Hangi sınıf kullanmaya karar gibi birkaç etkene bağlıdır:

  • Depolanan veri miktarını

  • Verilere erişme performans ve verimlilik

  • Anahtar veya dizin tarafından veri erişim olanağı

  • Verileri nasıl sipariş

  • Kişisel tercihi

Küçük koleksiyon sınıfları

atl nesneleri küçük sayılar ile ilgili aşağıdaki dizi sınıfları sağlar.Ancak, bu sınıfların sınırlı ve kullanım için dahili olarak bileşene ATL tarafından tasarlanmıştırProgramlarınızda bunları kullanmanız önerilmez.

Sınıf

Veri depolama türü

CSimpleArray

Nesneleri küçük sayılar ile ilgili bir dizi sınıfı uygular.

CSimpleMap

Nesneleri küçük sayılar ilgilenebilirsiniz eşleme sınıfı uygular.

Genel amaç koleksiyon sınıfları

İzleme sınıfları diziler, listeleri ve haritalar uygulamak ve genel amaçlı koleksiyon sınıfları olarak sağlanır:

Sınıf

Veri depolama türü

CAtlArray

Bir dizi uygular.

CAtlList

Bir liste uygular.

CAtlMap

Anahtar veya değer tarafından veri alınabildiği başvurulabilir bir eşleme yapısı uygular.

CRBMap

Kırmızı-siyah algoritmasını kullanarak eşleme yapısı uygular.

CRBMultiMap

Kırmızı-siyah multimapping yapısını uygular.

Bu sınıflar, hata ayıklama yapılarında kullanıldığında birçok programlama hatalarını yakalar, ancak performans for sake of perakende yapılarında bu denetimleri gerçekleştirilmez.

Özel koleksiyon sınıfları

Daha özel koleksiyon sınıfları da bellek işaretçiler ve arabirim işaretçilerine yönetmek için sağlanır:

Sınıf

Purpose

CAutoPtrArray

Akıllı işaretçiler dizisi oluşturulurken, kullanışlı bir yöntem sağlar.

CAutoPtrList

Akıllı işaretçiler listesi oluşturulurken, kullanışlı bir yöntem sağlar.

CComUnkArray

Mağazalar IUnknown işaretçiler ve parametre olarak kullanılmak üzere tasarlanmış IConnectionPointImpl şablon sınıfı.

CHeapPtrList

Yığın işaretçisi listesi oluşturulurken, kullanışlı bir yöntem sağlar.

CInterfaceArray

com arabirim işaretçilerine dizisi oluşturulurken, kullanışlı bir yöntem sağlar.

CInterfaceList

com arabirim işaretçilerine listesi oluşturulurken, kullanışlı bir yöntem sağlar.

Koleksiyon sýnýfýný seçme

Kullanılabilir toplama sınıflarının her biri aşağıdaki tabloda gösterildiği gibi farklı performans özellikleri sunar.

  • 2 Ve 3 sütun her sınıfın sıralamasını tanımlamak ve özelliklere erişebilirsiniz.Tabloda, "sipariş" terimi öğeler eklenen ve silinen sipariş sıralarına koleksiyonunda belirlediği anlamına gelir; Öğelerin içerikleri üzerinde sıralanır gelmez."Dizin" terimi, koleksiyondaki öğelerin tipik bir dizideki öğelerin benzemekle tamsayı bir dizini tarafından alınabilir anlamına gelir.

  • 4 Ve 5 sütun her sınıfın performans açıklayın.Koleksiyon birçok eklemeler gerektiren uygulamalar ekleme hızı özellikle önemli olabilir; diğer uygulamalar için arama hızı daha önemli olabilir.

  • Her şeklin yinelenen öğelere izin verip vermediğini 6 sütun açıklar.

  • Belirtilen koleksiyon sınıfı işleminin performansı açısından işlem ve koleksiyondaki öğe sayısını tamamlamak için gereken süreyi arasındaki ilişkiyi ifade edilir.Süreyi bir alma işlemi öğeleri artar sayısı O(n) algoritması olarak açıklandığı gibi doğrusal artırır.Bunun tersine, bir süre daha az ve az öğeleri artar sayısı arttıkça artar zaman ayırdığınız bir işlem o (günlük n) algoritması olarak tanımlanır.Bu nedenle, performans açısından o (günlük n) algoritmaları öğelerinin artar sayısı arttıkça daha da fazla O(n) algoritmalar tamamen geride.

Toplama şekli özellikleri

Şekil

Sipariş?

Dizine?

Ekle bir

öğe

Arama

Belirtilen öğe

Çoğaltma

öğeleri?

Liste

Evet

Hayyr

Hızlı (sabit süre)

Yavaş O(n)

Evet

Dizi

Evet

İnt (sabit süre)

Sonunda, büyük/küçük harf sabit geçen süre ekleyerek, dışında yavaş O(n)

Yavaş O(n)

Evet

Map

Hayyr

Anahtarının (sabit süre)

Hızlı (sabit süre)

Hızlı (sabit süre)

(Anahtar) Evet (değerler)

Kırmızı-siyah Haritası

Evet (anahtarla)

Anahtarının o (günlük n)

Hızlı o (günlük n)

Hızlı o (günlük n)

Hayyr

Kırmızı-siyah birden çok eşleme

Evet (anahtarla)

Anahtarının O(log n) (anahtar başına birden fazla değer)

Hızlı o (günlük n)

Hızlı o (günlük n)

Evet (anahtar başına birden fazla değer)

CTraits nesneleri kullanma

atl koleksiyon sýnýflarýný çeşitli kullanıcı tanımlı veri türlerini depolamak için kullanılan gibi karşılaştırmalar gibi önemli işlevleri geçersiz kılmak yararlı olabilir.Bu CTraits sınıfları kullanılarak sağlanır.

CTraits benzer, ancak daha esnektir, mfc koleksiyon sınıfı yardımcı işlevlerini sınıflardır; Bkz: Koleksiyon sınıfı Yardımcıları daha fazla bilgi için.

Toplama sınıfı oluşturulurken, CTraits sınıfı belirtme seçeneğiniz vardır.Bu sınıf, koleksiyon sýnýfýný olun yöntemler tarafından çağrıldığında karşılaştırmalar gibi işlemleri gerçekleştirecek kodunu içerecektir.Örneğin, kendi kullanıcı tanımlı yapılar listesi nesnesi içeriyorsa, yalnızca belirli üye değişkenleri karşılaştırmak için eşitlik test yeniden tanımlamak isteyebilirsiniz.Bu şekilde, liste nesnesinin Find yönteminin daha kullanışlı biçimde çalışır.

Örnek

15e672bd.collapse_all(tr-tr,VS.110).gifKod

// Collection class / traits class example.
// This program demonstrates using a CTraits class
// to create a new comparison operator.

#define MAX_STRING 80

// Define our own data type to store in the list.

struct MyData 
{
   int ID;
   TCHAR name[MAX_STRING];
   TCHAR address[MAX_STRING];
};

// Define our own traits class, making use of the
// existing traits and overriding only the comparison
// we need.

class MyTraits : public CElementTraits< MyData >
{
public:
    // Override the comparison to only compare
    // the ID value.

   static bool CompareElements(const MyData& element1, const MyData& element2)
   {
      if (element1.ID == element2.ID)
         return true;
      else
         return false;
   };
};

void DoAtlCustomTraitsList()
{
   // Declare the array, with our data type and traits class 

   CAtlList < MyData, MyTraits > MyList;

   // Create some variables of our data type

   MyData add_item, search_item;

   // Add some elements to the list.

   add_item.ID = 1;
   _stprintf_s(add_item.name, _T("Rumpelstiltskin"));
   _stprintf_s(add_item.address, _T("One Grimm Way"));

   MyList.AddHead(add_item);

   add_item.ID = 2;
   _stprintf_s(add_item.name, _T("Rapunzel"));
   _stprintf_s(add_item.address, _T("One Grimm Way"));

   MyList.AddHead(add_item);

   add_item.ID = 3;
   _stprintf_s(add_item.name, _T("Cinderella"));
   _stprintf_s(add_item.address, _T("Two Grimm Way"));

   MyList.AddHead(add_item);

   // Create an element which will be used
   // to search the list for a match.

   search_item.ID = 2;
   _stprintf_s(search_item.name, _T("Don't care"));
   _stprintf_s(search_item.address, _T("Don't care"));

   // Perform a comparison by searching for a match
   // between any element in the list, and our
   // search item. This operation will use the
   // (overridden) comparison operator and will
   // find a match when the IDs are the same.

   POSITION i;

   i = MyList.Find(search_item);

   if (i != NULL)
      _tprintf_s(_T("Item found!\n"));
   else
      _tprintf_s(_T("Item not found.\n"));
}

Comments

CTraits sınıfları listesi için bkz: Koleksiyon sýnýflarýný.

Aşağıdaki diyagramda, CTraits sınıflar için sınıf hiyerarşisini gösterir.

Koleksiyon sınıfları karakter hiyerarşisi

Koleksiyon sınıfları örnekleri

Aşağıdaki örnekler, koleksiyon sınıfları gösterilmektedir:

Ayrıca bkz.

Kavramlar

Koleksiyon sınıfları

Diğer Kaynaklar

atl kavramları