Udostępnij za pośrednictwem


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
  1. Aby serializować, należy jawnie wywołać funkcję obiektu Serialize kolekcji; aby zrzucić, należy jawnie wywołać jego Dump funkcję. Nie można użyć formularza ar << collObj do serializacji lub formularza dmp<< collObj do zrzutu.

  2. Serializacja zależy od bazowego typu kolekcji. Jeśli na przykład tablica wskaźników wpisanych jest oparta na CObArraymetodzie , można ją serializować; jeśli jest oparta na CPtrArraymetodzie , nie można jej serializować. Ogólnie rzecz biorąc, klasy "Ptr" nie mogą być serializowane.

  3. 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 CByteArrayjest 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