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ü |
---|---|
Nesneleri küçük sayılar ile ilgili bir dizi sınıfı uygular. |
|
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ü |
---|---|
Bir dizi uygular. |
|
Bir liste uygular. |
|
Anahtar veya değer tarafından veri alınabildiği başvurulabilir bir eşleme yapısı uygular. |
|
Kırmızı-siyah algoritmasını kullanarak eşleme yapısı uygular. |
|
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 |
---|---|
Akıllı işaretçiler dizisi oluşturulurken, kullanışlı bir yöntem sağlar. |
|
Akıllı işaretçiler listesi oluşturulurken, kullanışlı bir yöntem sağlar. |
|
Mağazalar IUnknown işaretçiler ve parametre olarak kullanılmak üzere tasarlanmış IConnectionPointImpl şablon sınıfı. |
|
Yığın işaretçisi listesi oluşturulurken, kullanışlı bir yöntem sağlar. |
|
com arabirim işaretçilerine dizisi oluşturulurken, kullanışlı bir yöntem sağlar. |
|
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
Kod
// 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ı örnekleri
Aşağıdaki örnekler, koleksiyon sınıfları gösterilmektedir: