Klasy zbioru 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 |
---|---|
Implementuje klasy array za zajmowanie się małej liczby obiektów. |
|
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 |
---|---|
Implementuje tablicy. |
|
Implementuje listy. |
|
Implementuje struktury mapowania, według której dane mogą odwoływać się klucz lub wartość. |
|
Implementuje struktury mapowania, przy użyciu algorytmu czerwono-czarne. |
|
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 |
---|---|
Zapewnia metody przydatne podczas tworzenia tablicy inteligentne kursory. |
|
Zapewnia metody przydatne podczas konstruowania listy wskaźników inteligentne. |
|
Sklepy IUnknown wskaźniki i jest przeznaczony do użycia jako parametr do IConnectionPointImpl szablonu klasy. |
|
Zapewnia metody przydatne podczas konstruowania listy wskaźników sterty. |
|
Zapewnia metody przydatne podczas tworzenia tablicy wskaźników interfejsów COM. |
|
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 Kolekcja klasy pomocników 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.
Zbieranie próbek klas
Następujące próbki wykazują klasy kolekcji: