Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 |
Aby serializować, należy jawnie wywołać funkcję
Serializeobiektu kolekcji; aby zrzucić, należy jawnie wywołać funkcjęDump. Nie można użyć formatuar << collObjdo serializacji ani formatudmp<< collObjdo zrzucania.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 naCPtrArraymetodzie , 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, 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