Klasy kolekcji ATL

ATL zawiera wiele klas do przechowywania danych.Klasy, które użytkownik zdecyduje się użyć, zależy od kilku czynników, w tym:

  • Ilość danych, które mają być przechowywane

  • Skuteczność i wydajność dostępu do danych

  • Możliwość dostępu do danych przez indeks lub klucz

  • Sposób porządkowania danych

  • Osobistych preferencji.

Małe klasy kolekcji

ATL zawiera następujące klasy array za zajmowanie się małej liczby obiektów.Jednak ograniczona i przeznaczone do użytku wewnętrznie przez ATL. tych klasNie zaleca się używania ich w programach.

Klasa

Typ magazynu danych

CSimpleArray

Implementuje klasy array za zajmowanie się małej liczby obiektów.

CSimpleMap

Implementuje klasy mapowania zajmujących się małej liczby obiektów.

Ogólne klasy kolekcji cel

Klasy follow wdrożenia tablice, listy i mapy i są dostarczane jako klasy kolekcji ogólnego przeznaczenia:

Klasa

Typ magazynu danych

CAtlArray

Implementuje tablicy.

CAtlList

Implementuje listy.

CAtlMap

Implementuje struktury mapowania, według której dane mogą odwoływać się klucz lub wartość.

CRBMap

Implementuje struktury mapowania, przy użyciu algorytmu czerwono-czarne.

CRBMultiMap

Implementuje struktury multimapping czerwony-czarny.

Klasy te będą stosowane nadlewki wiele błędów programowania w debugowania, ale rozszerzonej wydajności, kontrole te nie będą wykonywane w detalicznych kompilacjach.

Wyspecjalizowane klasy kolekcji

Bardziej wyspecjalizowane klasy kolekcji przewidziano również zarządzanie wskaźniki pamięci i wskaźników interfejsów:

Klasa

Cel

CAutoPtrArray

Zapewnia metody przydatne podczas tworzenia tablicy inteligentne kursory.

CAutoPtrList

Zapewnia metody przydatne podczas konstruowania listy wskaźników inteligentne.

CComUnkArray

Sklepy IUnknown wskaźniki i jest przeznaczony do użycia jako parametr do IConnectionPointImpl szablonu klasy.

CHeapPtrList

Zapewnia metody przydatne podczas konstruowania listy wskaźników sterty.

CInterfaceArray

Zapewnia metody przydatne podczas tworzenia tablicy wskaźników interfejsów COM.

CInterfaceList

Zapewnia metody przydatne podczas konstruowania listy wskaźników interfejsu COM.

Klasa kolekcji Wybieranie

Każdej klasy kolekcji dostępne oferuje różne cechy, jak pokazano w poniższej tabeli.

  • W kolumnach 2 i 3 opisują zamawiania każdej klasy i dostępu do właściwości.W tabeli termin "zamówione" oznacza, że zamówienie wstawione i usunięte elementy określa ich kolejność w kolekcji; nie oznacza, że elementy są sortowane na ich zawartość.Termin "indeksowane" oznacza, że elementy w kolekcji mogą być pobierane przez indeks integer, podobnie jak elementy w tablicy typowe.

  • Kolumny 4 i 5 opisują wydajność każdej klasy.W aplikacji, które wymagają wielu wstawienia do kolekcji szybkość wstawiania może być szczególnie ważne; dla innych aplikacji może być ważniejsza szybkiego wyszukiwania.

  • W kolumnie 6 opisuje, czy każdy kształt zezwala na zduplikowane elementy.

  • Wydajność operacji klasy danej kolekcji jest wyrażona w relacji między czas wymagany do ukończenia operacji oraz liczba elementów w kolekcji.Uwzględniając czas operacji, zwiększa liniowo opisane jako algorytm O(n) liczba elementów wzrasta.Natomiast operację, uwzględniając okres czasu, który zwiększa się coraz mniej jako liczba wzrasta elementów jest opisany jako algorytmu O (n dziennika).Dlatego efektywności, algorytmy O (log n) przewyższyć algorytmy O(n) bardziej jako liczba elementów wzrasta.

Kolekcja funkcji kształtu

Kształt

Zamówione?

Indeksowane?

Wstaw

element

Wyszukiwanie

określony element

Duplikat

elementy?

Lista

Tak

Nr

Fast (czas stałej)

O(n) wolne

Tak

Tablica

Tak

Przez int (czas stałej)

Powolne O(n) z wyjątkiem Jeśli wstawiania na koniec, w których przypadku stałego czasu

O(n) wolne

Tak

Mapa

Nr

Klucz (czas stałej)

Fast (czas stałej)

Fast (czas stałej)

Tak (wartości) (kluczy)

Mapa czerwono czarne

Tak (klucza)

Przez klawisz O (log n)

O szybkie (log n)

O szybkie (log n)

Nr

Mapa wielokrotnego dopasowania czerwono czarne

Tak (klucza)

Klucz O(log n) (wielu wartości dla jednego klucza)

O szybkie (log n)

O szybkie (log n)

Tak (wielu wartości dla jednego klucza)

Obiekty CTraits

Jak klasy kolekcji ATL mogą być używane do przechowywania szeroki zakres typów danych zdefiniowanych przez użytkownika, może być przydatne można zastąpić ważne funkcje, takie jak porównań.Można to osiągnąć za pomocą klasy CTraits.

CTraits klasy są podobne do, ale bardziej elastyczne niż MFC kolekcji klasy pomocnicze funkcje; zobacz Pomocnicy klasy kolekcji Aby uzyskać więcej informacji.

Przy konstruowaniu klasy kolekcji, istnieje możliwość określenia klasy CTraits.Klasa ta będzie zawierać kod, który będzie wykonywać operacje takie jak porównań, wywołanie metody, które Klasa kolekcji.Na przykład jeśli obiekt listy zawiera własne struktury zdefiniowane przez użytkownika, chcesz przedefiniować test równości do porównywania tylko niektóre zmienne składowe.W ten sposób metodę szukania obiektu listy będzie działać w sposób bardziej użyteczne.

Przykład

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

Komentarze

Lista klas CTraits, zobacz Klasy kolekcji.

Poniższy diagram przedstawia hierarchia klas dla klasy CTraits.

Cechy hierarchii dla klas kolekcji

Zbieranie próbek klas

Następujące próbki wykazują klasy kolekcji:

Zobacz też

Koncepcje

Klasy zbioru

Inne zasoby

Pojęcia biblioteki Active Template Library (ALT)