Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Etkin Şablon Kitaplığı (ATL) desteklenmeye devam eder. Ancak artık özellik eklemeyeceğiz veya belgeleri güncelleştirmeyeceğiz.
ATL, verileri depolamak ve verilere erişmek için birçok sınıf sağlar. Hangi sınıfı kullanmaya karar vereceğiniz aşağıdakiler gibi çeşitli faktörlere bağlıdır:
Depolanacak veri miktarı
Verilere erişimde verimlilik ve performans karşılaştırması
Verilere dizine veya anahtara göre erişme olanağı
Veriler nasıl sıralanır?
Kişisel tercih
Küçük Koleksiyon Sınıfları
ATL, az sayıda nesneyle ilgilenmek için aşağıdaki dizi sınıflarını sağlar. Ancak, bu sınıflar sınırlı ve ATL tarafından dahili olarak kullanılmak üzere tasarlanmıştır. Bunları programlarınızda kullanmanız önerilmez.
| Sınıf | Veri depolama türü |
|---|---|
| CSimpleArray | Az sayıda nesneyle ilgilenmek için bir dizi sınıfı uygular. |
| CSimpleMap | Az sayıda nesneyle ilgilenmek için bir eşleme sınıfı uygular. |
Genel Amaçlı Koleksiyon Sınıfları
Aşağıdaki sınıflar diziler, listeler ve haritalar uygular ve genel amaçlı koleksiyon sınıfları olarak sağlanır:
| Sınıf | Veri depolama türü |
|---|---|
| CAtlArray | Bir diziyi uygular. |
| CAtlList | Bir liste uygular. |
| CAtlMap | Verilere anahtar veya değer tarafından başvurulabildiği bir eşleme yapısı uygular. |
| CRBMap | Kırmızı-Siyah algoritmasını kullanarak bir eşleme yapısı uygular. |
| CRBMultiMap | Kırmızı-Siyah çoklu eşleme yapısı uygular. |
Bu sınıflar hata ayıklama derlemelerinde kullanıldığında birçok programlama hatasını yakalar, ancak performans açısından bu denetimler perakende derlemelerinde gerçekleştirilmeyecektir.
Özel Koleksiyon Sınıfları
Bellek işaretçilerini ve arabirim işaretçilerini yönetmek için daha özel koleksiyon sınıfları da sağlanır:
| Sınıf | Amaç |
|---|---|
| CAutoPtrArray | Akıllı işaretçi dizisi oluştururken yararlı yöntemler sağlar. |
| CAutoPtrList | Akıllı işaretçilerin listesini oluştururken yararlı yöntemler sağlar. |
| CComUnkArray |
IUnknown işaretçilerini depolar ve IConnectionPointImpl şablon sınıfı için parametre olarak kullanılmak üzere tasarlanmıştır. |
| CHeapPtrList | Yığın işaretçilerinin listesini oluştururken yararlı yöntemler sunar. |
| CInterfaceArray | COM arabirim işaretçileri dizisi oluştururken yararlı yöntemler sağlar. |
| CInterfaceList | COM arabirim işaretçilerinin listesini oluştururken yararlı yöntemler sağlar. |
Koleksiyon Sınıfı Seçme
Aşağıdaki tabloda gösterildiği gibi kullanılabilir koleksiyon sınıflarının her biri farklı performans özellikleri sunar.
2. ve 3. sütunlarda her sınıfın sıralama ve erişim özellikleri açıklanmaktadır. Tabloda "sıralı" terimi, öğelerin eklendiği ve silindiği sıranın koleksiyondaki sıralarını belirlediği anlamına gelir; bu, öğelerin içeriklerine göre sıralandığı anlamına gelmez. "Dizinli" terimi, koleksiyondaki öğelerin tipik bir dizideki öğelere çok benzer bir tamsayı dizini tarafından alınabileceği anlamına gelir.
4. ve 5. sütunlar her sınıfın performansını açıklar. Koleksiyona çok sayıda ekleme gerektiren uygulamalarda ekleme hızı özellikle önemli olabilir; diğer uygulamalar için arama hızı daha önemli olabilir.
6. sütun, her şeklin yinelenen öğelere izin verip vermeyeceğini açıklar.
Belirli bir koleksiyon sınıfı işleminin performansı, işlemi tamamlamak için gereken süre ile koleksiyondaki öğe sayısı arasındaki ilişki açısından ifade edilir. Öğe sayısı arttıkça doğrusal olarak artan bir süre alan bir işlem bir O(n) algoritması olarak tanımlanır. Buna karşılık, öğe sayısı arttıkça daha az ve daha az zaman alan bir işlem O(log n) algoritması olarak tanımlanır. Bu nedenle, performans açısından O(log n) algoritmaları, öğe sayısı arttıkça O(n) algoritmalarından daha fazla performans gösterir.
Koleksiyon Şekli Özellikleri
| Şekil | Sipariş edilen | Endekslenmiş | Ekleme öğesi |
Şunu ara: belirtilen öğe |
Yinele öğeler |
|---|---|---|---|---|---|
| Liste | Evet | Hayır | Hızlı (sabit süre) | Yavaş O(n) | Evet |
| Dizi | Evet | Int (sabit süre) ile | Sonda ekleme işlemi dışında yavaş O(n) ve bu durumda sabit süre | Yavaş O(n) | Evet |
| Harita | Hayır | Tuşa göre (sabit saat) | Hızlı (sabit süre) | Hızlı (sabit süre) | Hayır (anahtarlar) Evet (değerler) |
| Kırmızı-Siyah Harita | Evet (tuşa göre) | Anahtara göre O(log n) | Hızlı O(logaritmik n) | Hızlı O(log n) | Hayır |
| Kırmızı-Siyah Çoklu Harita | Evet (tuşa göre) | Anahtara göre O(log n) (anahtar başına birden çok değer) | Hızlı O(log n) | Hızlı O(log n) | Evet (anahtar başına birden çok değer) |
CTraits Nesnelerini Kullanma
ATL koleksiyonu sınıfları çok çeşitli kullanıcı tanımlı veri türlerini depolamak için kullanılabildiğinden, karşılaştırmalar gibi önemli işlevleri geçersiz kılmak yararlı olabilir. Bu, CTraits sınıfları kullanılarak elde edilir.
CTraits sınıfları, MFC koleksiyon sınıfı yardımcı işlevlerine benzer, ancak daha esnektir; Daha fazla bilgi için bkz . Koleksiyon Sınıfı Yardımcıları .
Koleksiyon sınıfınızı oluştururken bir CTraits sınıfı belirtme seçeneğiniz vardır. Bu sınıf, koleksiyon sınıfını oluşturan diğer yöntemler tarafından çağrıldığında karşılaştırmalar gibi işlemler gerçekleştirecek kodu içerir. Örneğin, liste nesneniz kendi kullanıcı tanımlı yapılarınızı içeriyorsa, yalnızca belirli üye değişkenlerini karşılaştırmak için eşitlik testini yeniden tanımlamak isteyebilirsiniz. Bu şekilde, liste nesnesinin Find yöntemi daha kullanışlı bir şekilde ç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"));
}
Açıklamalar
CTraits sınıflarının listesi için bkz . Koleksiyon Sınıfları.
Aşağıdaki diyagramda CTraits sınıfları için sınıf hiyerarşisi gösterilmektedir.
Koleksiyon Sınıfları Örnekleri
Aşağıdaki örnekler koleksiyon sınıflarını gösterir: