Doporučení pro výběr třídy kolekce
Tento článek obsahuje podrobné informace, které vám pomůžou vybrat třídu kolekce pro konkrétní potřeby aplikace.
Volba třídy kolekce závisí na řadě faktorů, mezi které patří:
Funkce obrazce třídy: pořadí, indexování a výkon, jak je znázorněno v tabulce Funkce obrazce kolekce dále v tomto tématu
Zda třída používá šablony jazyka C++
Zda lze serializovat prvky uložené v kolekci
Určuje, jestli lze prvky uložené v kolekci vyhodit pro diagnostiku.
Zda je kolekce bezpečná pro typ
Následující tabulka Funkce obrazců kolekce shrnuje charakteristiky dostupných obrazců kolekce.
Sloupce 2 a 3 popisují pořadí a charakteristiky přístupu jednotlivých obrazců. Výraz "objednaný" v tabulce znamená, že pořadí, ve kterém jsou položky vloženy a odstraněny, určuje jejich pořadí v kolekci; neznamená, že položky jsou seřazené v jejich obsahu. Výraz "indexed" znamená, že položky v kolekci lze načíst celočíselnou indexou, podobně jako položky v typickém poli.
Sloupce 4 a 5 popisují výkon jednotlivých obrazců. V aplikacích, které vyžadují mnoho vložení do kolekce, může být rychlost vkládání obzvláště důležitá; pro jiné aplikace může být důležitější rychlost vyhledávání.
Sloupec 6 popisuje, jestli každý obrazec umožňuje duplicitní prvky.
Funkce obrazce kolekce
Tvar | Objednáno | Indexované | Vložení elementu | Hledání zadaného prvku | Duplicitní prvky |
---|---|---|---|---|---|
Seznam | Ano | Ne | Rychlé | Pomalá | Ano |
Pole | Ano | Podle int | Pomalá | Pomalá | Ano |
Map | Číslo | Podle klíče | Rychlé | Rychlé | Ne (klíče) Ano (hodnoty) |
Následující tabulka, Charakteristiky tříd kolekce MFC, shrnuje další důležité vlastnosti konkrétních tříd kolekce MFC jako vodítko pro výběr. Vaše volba může záviset na tom, zda je třída založená na šablonách jazyka C++, zda lze jeho prvky serializovat prostřednictvím mechanismu serializace dokumentů MFC, zda lze jeho prvky vypsat prostřednictvím diagnostického dumpingového mechanismu MFC, nebo zda je třída bezpečná pro typ – to znamená, zda můžete zaručit typ prvků uložených v kolekci a načíst z kolekce založené na třídě.
Charakteristiky tříd kolekce MFC
Třída | Používá C++ šablony |
Může být Serializovat |
Může být Dumpingových |
Is typově bezpečný |
---|---|---|---|---|
CArray |
Ano | Ano 1 | Ano 1 | Číslo |
CByteArray |
No | Ano | Ano | Ano 3 |
CDWordArray |
Číslo | Ano | Ano | Ano 3 |
CList |
Ano | Ano 1 | Ano 1 | Číslo |
CMap |
Ano | Ano 1 | Ano 1 | Číslo |
CMapPtrToPtr |
No | No | Ano | No |
CMapPtrToWord |
No | No | Ano | No |
CMapStringToOb |
No | Ano | Ano | No |
CMapStringToPtr |
No | No | Ano | No |
CMapStringToString |
No | Ano | Ano | Ano 3 |
CMapWordToOb |
Číslo | Ano | Ano | No |
CMapWordToPtr |
No | No | Ano | No |
CObArray |
No | Ano | Ano | No |
CObList |
No | Ano | Ano | No |
CPtrArray |
No | No | Ano | No |
CPtrList |
No | No | Ano | No |
CStringArray |
No | Ano | Ano | Ano 3 |
CStringList |
Číslo | Ano | Ano | Ano 3 |
CTypedPtrArray |
Ano | Závisí na 2 | Ano | Ano |
CTypedPtrList |
Ano | Závisí na 2 | Ano | Ano |
CTypedPtrMap |
Ano | Závisí na 2 | Ano | Ano |
CUIntArray |
No | No | Ano | Ano 3 |
CWordArray |
Číslo | Ano | Ano | Ano 3 |
Chcete-li serializovat, musíte explicitně volat funkci objektu
Serialize
kolekce; k výpisu je nutné explicitně volat jehoDump
funkci. Formulář nelze použítar << collObj
k serializaci nebo formulářdmp
<< collObj
k výpisu.Serializovatelnost závisí na základním typu kolekce. Pokud je například pole typu ukazatele založené na
CObArray
, je serializovatelné; pokud je založeno naCPtrArray
, není serializovatelné. Obecně platí, že třídy Ptr nelze serializovat.Pokud je v tomto sloupci označena možnost Ano, je třída kolekce bez přípony typu za předpokladu, že ji použijete podle očekávání. Pokud například ukládáte bajty do
CByteArray
pole, pole je typu bezpečné. Pokud ho ale použijete k ukládání znaků, bezpečnost typů je méně jistá.
Viz také
Kolekce
Třídy založené na šablonách
Postupy: Příprava typově bezpečné kolekce
Přístup ke všem členům kolekce