Udostępnij przez


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ć wyładowane do diagnostyki

  • Czy kolekcja jest bezpieczna pod typem

Poniższa tabela, Charakterystyka Kształtów Kolekcji, podsumowuje cechy 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
Lista Tak Nie. Szybko Powolny Tak
Tablica Tak Według int Powolny Powolny Tak
Mapa Nie. Według klucza Szybko Szybko Nie (klucze) Tak (wartości)

Poniższa tabela, Charakterystyki Klas Kolekcji MFC, podsumowuje inne ważne cechy określonych klas kolekcji MFC jako przewodnik do ich wyboru. Wybór może zależeć od tego, czy klasa jest oparta na szablonach języka C++, czy jej elementy mogą być serializowane przy użyciu mechanizmu serializacji dokumentów MFC, czy jej elementy mogą być zrzucane za pomocą mechanizmu dumpingu diagnostycznego MFC, czy też klasa zapewnia bezpieczeństwo typów — oznacza to, czy można zagwarantować typ elementów przechowywanych i pobieranych w oparciu o klasę.

Charakterystyka klas kolekcji MFC

Klasa Używa języka C++

Szablony
Może być

Seryjne
Może być

Wyrzucony
Jest

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ę Serialize obiektu kolekcji; aby zrzucić, należy jawnie wywołać funkcję Dump. Nie można użyć formatu ar << collObj do serializacji ani formatu dmp<< collObj do zrzucania.

  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, jeśli przechowujesz bajty w tablicy CByteArray, to tablica jest bezpieczna typowo. Ale jeśli używasz go do przechowywania znaków, jego bezpieczeństwo typu jest mniej pewne.

Zobacz także

Kolekcje
klasyTemplate-Based
Instrukcje: tworzenie kolekcji Type-Safe
Uzyskiwanie dostępu do wszystkich członków kolekcji