Sdílet prostřednictvím


ATL – třídy kolekce

ATL poskytuje mnoho tříd pro ukládání a přístup k datům.Třídy, které se rozhodnete použít, závisí na několika faktorech, včetně:

  • Částka uložení dat

  • Účinnost a výkon přístupu k datům

  • Možnost přístupu k datům podle indexu nebo klíč

  • Způsob řazení dat.

  • Osobní předvolby

Malé kolekce tříd

ATL obsahuje následující třídy array pro malý počet objektů se zabývá.Tyto třídy se však omezené a určen pro interně ATL.Není vhodné je použít v programech.

Třída

Úložiště dat

CSimpleArray

Implementuje třídu array pro malý počet objektů se zabývá.

CSimpleMap

Implementuje třída mapování pro malý počet objektů se zabývá.

Obecný účel kolekce tříd

Třídy postupujte zavést matice, seznamů a map a slouží jako univerzální kolekce tříd:

Třída

Úložiště dat

CAtlArray

Implementuje matice.

CAtlList

Seznam implementuje.

CAtlMap

Implementuje mapování struktury, kterým data lze odkazovat pomocí klíče nebo hodnoty.

CRBMap

Implementuje mapování struktury pomocí algoritmu červená-černá.

CRBMultiMap

Multimapping struktura implementuje červená-černá.

Tyto třídy provede soutisk mnoho programových chyb v sestavení ladění, ale for sake of výkon, nebudou provedeny tyto kontroly v maloobchodní sestavení.

Specializované třídy kolekce

Další specializované třídy kolekce jsou k dispozici také pro správu paměti ukazatele a ukazatele rozhraní:

Třída

Účel

CAutoPtrArray

Poskytuje metody, které jsou užitečné při vytváření pole inteligentní ukazatelů.

CAutoPtrList

Poskytuje metody, které jsou užitečné při vytváření seznamu inteligentní ukazatelů.

CComUnkArray

Obchody IUnknown ukazatelů a je určen k použití jako parametr IConnectionPointImpl šablonu třídy.

CHeapPtrList

Poskytuje metody, které jsou užitečné při vytváření seznamu ukazatelů haldy.

CInterfaceArray

Poskytuje metody, které jsou užitečné při vytváření pole ukazatele rozhraní COM.

CInterfaceList

Poskytuje metody, které jsou užitečné při vytváření seznamu ukazatelů rozhraní COM.

Kolekce třídy pro výběr

Každou ze tříd dostupné kolekce nabízí různé charakteristiky, jak je znázorněno v následující tabulce.

  • Sloupce 2 a 3 popisují řazení jednotlivých tříd a přístup k vlastnosti.V tabulce "objednáno" rozumí že určuje pořadí, ve kterém jsou položky vkládání a odstraňování jejich pořadí kolekce. To však neznamená, že položky jsou seřazeny na jejich obsah.Termín "indexovaných" znamená, že položky v kolekci může načíst celé číslo indexu, podobně jako typické pole položky.

  • Sloupce 4 a 5 popisují jednotlivé třídy výkonu.V aplikacích, které vyžadují mnoho vkládání do kolekce může být rychlost vkládání zvláště důležité. pro ostatní aplikace může být důležitější rychlost vyhledávání.

  • Sloupec 6 popisuje, zda každý obrazec může obsahovat duplicitní prvky.

  • Výkon operace třídy dané kolekce vyjadřuje vztah mezi čas potřebný k dokončení operace a počet prvků v kolekci.Přičemž dobu operace, lineárně zvyšuje počet zvyšuje prvky popsané jako algoritmus O(n).Naopak operace, přičemž časový úsek, který zvyšuje méně jako počet prvků zvýšení je popsán jako algoritmus O (n protokolu).S ohledem na výkon, proto na algoritmy (protokol n) O výrazně překonat algoritmy O(n) více jako počet prvků zvyšuje.

Funkce kolekce obrazce

Obrazce

Objednané?

Indexovány?

Vložit

prvek

Hledat

Zadaný prvek

Duplikovat

prvky?

Seznam

Ano

Ne

Rychlé (konstantní čas)

Pomalé O(n).

Ano

Pole

Ano

Podle int (čas konstantní)

Pomalé O(n) kromě Pokud vložení na konci, kdy konstantní případu

Pomalé O(n).

Ano

Mapa

Ne

Klíčem (konstantní čas)

Rychlé (konstantní čas)

Rychlé (konstantní čas)

Žádné (klíče) Ano (hodnoty)

Mapa červená černá

Ano (klíčem)

Klíčem O (n protokolu)

O rychlé (protokol n)

O rychlé (protokol n)

Ne

Vícenásobné mapování červená černá

Ano (klíčem)

Klíč O(log n) (vícenásobné hodnoty dle klíče)

O rychlé (protokol n)

O rychlé (protokol n)

Ano (vícenásobné hodnoty dle klíče)

Použití objektů CTraits

Jako kolekce třídy ATL lze použít k uložení širokou škálu typů dat definovaných uživatelem, může být užitečné mít možnost přepsat důležité funkce, například porovnání.Toho lze dosáhnout pomocí třídy CTraits.

CTraits třídy jsou podobné, ale flexibilnější než MFC kolekce třídy pomocné funkce; Viz Pomocné rutiny třídy kolekce Další informace.

Při vytváření kolekce třídy, máte možnost určit třídu CTraits.Tato třída bude obsahovat kód, který bude provádět operace jako porovnání volání metody, které tvoří kolekce třídy.Například pokud objekt seznamu obsahuje vlastní struktury definované uživatelem, můžete předefinovat test rovnosti porovnat pouze určité členské proměnné.Tímto způsobem najít metodu objektu seznamu pracovat způsobem užitečnější.

Příklad

Kód

// 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"));
}

Komentáře

Seznam tříd CTraits, viz Třídy kolekce.

Následující diagram znázorňuje hierarchie třídy pro třídy CTraits.

Hierarchie vlastností pro kolekce tříd

Kolekce třídy vzorků

Následující ukázky prokázat kolekce tříd:

Viz také

Koncepty

Kolekce třídy

Další zdroje

Koncepty knihovny ATL (Active Template Library)