Zalecenia dotyczące wybierania klasy kolekcji
Ten artykuł zawiera szczegółowe informacje ułatwiające wybór klasy kolekcji dla konkretnych potrzeb aplikacji.
Wybór klasy kolekcji zależy od wielu czynników, takich jak:
Funkcje kształtu klasy: kolejność, indeksowanie i wydajność, jak pokazano w tabeli Funkcje kształtu kolekcji w dalszej części tego tematu
Czy klasa używa szablonów języka C++
Czy elementy przechowywane w kolekcji mogą być serializowane
Czy elementy przechowywane w kolekcji mogą być po cenach dumpingowych do diagnostyki
Czy kolekcja jest bezpieczna pod typem
Poniższa tabela zawiera podsumowanie cech dostępnych kształtów kolekcji.
Kolumny 2 i 3 opisują kolejność i dostęp do poszczególnych kształtów. W tabeli termin "uporządkowany" oznacza, że kolejność wstawiania i usuwania elementów określa ich kolejność w kolekcji; nie oznacza to, że elementy są sortowane na ich zawartości. Termin "indeksowany" oznacza, że elementy w kolekcji mogą być pobierane przez indeks liczb całkowitych, podobnie jak elementy w typowej tablicy.
Kolumny 4 i 5 opisują wydajność każdego kształtu. W aplikacjach wymagających wielu wstawiania do kolekcji szybkość wstawiania może być szczególnie ważna; w przypadku innych aplikacji szybkość wyszukiwania może być ważniejsza.
Kolumna 6 opisuje, czy każdy kształt zezwala na zduplikowane elementy.
Funkcje kształtu kolekcji
Kształt | Zamówiona | Indeksowane | Wstaw element | Wyszukaj określony element | Zduplikowane elementy |
---|---|---|---|---|---|
List | Tak | Nie. | Szybkie przetwarzanie | Mała | Tak |
Tablica | Tak | Według int | Mała | Mała | Tak |
Mapowanie | Nie. | Według klucza | Szybkie przetwarzanie | Szybkie przetwarzanie | Nie (klucze) Tak (wartości) |
W poniższej tabeli charakterystyki klas kolekcji MFC podsumowano inne ważne cechy określonych klas kolekcji MFC jako przewodnik po zaznaczeniu. Wybór może zależeć od tego, czy klasa jest oparta na szablonach języka C++, czy jego elementy mogą być serializowane za pośrednictwem mechanizmu serializacji dokumentów MFC, czy jego elementy mogą być po cenach dumpingowych za pośrednictwem mechanizmu dumpingu diagnostycznego MFC, czy też klasa jest bezpieczna dla typu — oznacza to, czy można zagwarantować typ elementów przechowywanych w kolekcji i pobranych z kolekcji na podstawie klasy.
Charakterystyka klas kolekcji MFC
Klasa | Używa języka C++ szablony |
Może być Szeregowane |
Może być Po cenach dumpingowych |
Is bezpieczny typ |
---|---|---|---|---|
CArray |
Tak | Tak 1 | Tak 1 | Nie. |
CByteArray |
Nie. | Tak | Tak | Tak 3 |
CDWordArray |
Nie. | Tak | Tak | Tak 3 |
CList |
Tak | Tak 1 | Tak 1 | Nie. |
CMap |
Tak | Tak 1 | Tak 1 | Nie. |
CMapPtrToPtr |
Nie. | Nie. | Tak | Nie. |
CMapPtrToWord |
Nie. | Nie. | Tak | Nie. |
CMapStringToOb |
Nie. | Tak | Tak | Nie. |
CMapStringToPtr |
Nie. | Nie. | Tak | Nie. |
CMapStringToString |
Nie. | Tak | Tak | Tak 3 |
CMapWordToOb |
Nie. | Tak | Tak | Nie. |
CMapWordToPtr |
Nie. | Nie. | Tak | Nie. |
CObArray |
Nie. | Tak | Tak | Nie. |
CObList |
Nie. | Tak | Tak | Nie. |
CPtrArray |
Nie. | Nie. | Tak | Nie. |
CPtrList |
Nie. | Nie. | Tak | Nie. |
CStringArray |
Nie. | Tak | Tak | Tak 3 |
CStringList |
Nie. | Tak | Tak | Tak 3 |
CTypedPtrArray |
Tak | Zależy od 2 | Tak | Tak |
CTypedPtrList |
Tak | Zależy od 2 | Tak | Tak |
CTypedPtrMap |
Tak | Zależy od 2 | Tak | Tak |
CUIntArray |
Nie. | Nie. | Tak | Tak 3 |
CWordArray |
Nie. | Tak | Tak | Tak 3 |
Aby serializować, należy jawnie wywołać funkcję obiektu
Serialize
kolekcji; aby zrzucić, należy jawnie wywołać jegoDump
funkcję. Nie można użyć formularzaar << collObj
do serializacji lub formularzadmp
<< collObj
do zrzutu.Serializacja zależy od bazowego typu kolekcji. Jeśli na przykład tablica wskaźników wpisanych jest oparta na
CObArray
metodzie , można ją serializować; jeśli jest oparta naCPtrArray
metodzie , nie można jej serializować. Ogólnie rzecz biorąc, klasy "Ptr" nie mogą być serializowane.Jeśli w tej kolumnie oznaczono wartość Tak, klasa kolekcji nontemplate jest bezpieczna pod warunkiem, że używasz jej zgodnie z oczekiwaniami. Na przykład w przypadku przechowywania bajtów w tablicy
CByteArray
jest bezpieczny typ. Ale jeśli używasz go do przechowywania znaków, jego bezpieczeństwo typu jest mniej pewne.
Zobacz też
Kolekcje
Klasy oparte na szablonach
Instrukcje: tworzenie bezpiecznej kolekcji
Uzyskiwanie dostępu do wszystkich składowych kolekcji