Recomendações para escolher uma classe de coleção
Este artigo contém informações detalhadas criada para ajudá-lo a escolher uma classe de coleção para suas necessidades específicas do aplicativo.
A escolha de uma classe de coleção depende de vários fatores, incluindo:
Os recursos de formas da classe: ordem, a indexação, e desempenho, conforme mostrado na tabela de Recursos de formas de coleção posteriormente neste tópico
Se a classe usa modelos C++
Se os elementos armazenados na coleção podem ser serializados
Se os elementos da coleção podem ser armazenados despejados para diagnóstico
Se a coleção é fortemente tipado
A tabela a seguir, Recursos de formas de coleção, resume as características das formas disponíveis da coleção.
As colunas 2 e 3 descrevem cada forma que acessam ordena e características. Na tabela, o termo “ordenou” significa que a ordem em que os itens são inseridos e excluídos determina a ordem na coleção; não significa que os itens são classificados em seu conteúdo. O termo “indexado” significa que os itens da coleção podem ser recuperados por um índice inteiro, bem como itens em uma matriz típica.
As colunas 4 e 5 descrevem o desempenho de cada forma. Em aplicativos que requerem muitas inserções na coleção, a velocidade de inserção pode ser especialmente importante; para outros aplicativos, a velocidade de pesquisa pode ser mais importante.
6 Se a coluna descreve cada forma permite os elementos duplicados.
Recursos de formas de coleção
Forma |
Ordenado? |
Indexados? |
Insere um elemento |
Pesquise pelo elemento especificado |
Duplique os elementos? |
---|---|---|---|---|---|
Lista |
Sim |
Não |
Jejue |
Lenta |
Sim |
Matriz |
Sim |
Por int |
Lenta |
Lenta |
Sim |
Mapa |
Não |
Por chave |
Jejue |
Jejue |
Nenhum Sim (de chaves) (valores) |
A tabela a seguir, Características de classes de coleção de MFC, resume outras características importantes de classes específicas da coleção de MFC como a guia na seleção. A opção pode depender se a classe é baseada em modelos C++, se os elementos podem ser serializados por meio do mecanismo de serialização do documento MFC, se os elementos podem ser despejados por meio do mecanismo de despejo de diagnóstico MFC, ou se a classe for fortemente tipado - isto é, se você pode garantir o tipo de elementos armazenados no e recuperados de uma coleção com base na classe.
Características de classes de coleção de MFC
Classe |
Usa C++ modelos |
Pode ser serializado |
Pode ser despejado |
Is tipo de segurança |
---|---|---|---|---|
CArray |
Sim |
Sim 1 |
Sim 1 |
Não |
CByteArray |
Não |
Sim |
Sim |
Sim 3 |
CDWordArray |
Não |
Sim |
Sim |
Sim 3 |
CList |
Sim |
Sim 1 |
Sim 1 |
Não |
CMap |
Sim |
Sim 1 |
Sim 1 |
Não |
CMapPtrToPtr |
Não |
Não |
Sim |
Não |
CMapPtrToWord |
Não |
Não |
Sim |
Não |
CMapStringToOb |
Não |
Sim |
Sim |
Não |
CMapStringToPtr |
Não |
Não |
Sim |
Não |
CMapStringToString |
Não |
Sim |
Sim |
Sim 3 |
CMapWordToOb |
Não |
Sim |
Sim |
Não |
CMapWordToPtr |
Não |
Não |
Sim |
Não |
CObArray |
Não |
Sim |
Sim |
Não |
CObList |
Não |
Sim |
Sim |
Não |
CPtrArray |
Não |
Não |
Sim |
Não |
CPtrList |
Não |
Não |
Sim |
Não |
CStringArray |
Não |
Sim |
Sim |
Sim 3 |
CStringList |
Não |
Sim |
Sim |
Sim 3 |
CTypedPtrArray |
Sim |
Dependem 2 |
Sim |
Sim |
CTypedPtrList |
Sim |
Dependem 2 |
Sim |
Sim |
CTypedPtrMap |
Sim |
Dependem 2 |
Sim |
Sim |
CUIntArray |
Não |
Não |
Sim |
Sim 3 |
CWordArray |
Não |
Sim |
Sim |
Sim 3 |
1. Para serializar, você deve chamar explicitamente a função de Serialize do objeto da coleção; para despejar, você deve chamar explicitamente a função de Dump . Você não pode usar o formulário ar << collObj para serializar ou o formulário dmp << collObj a despejar.
2. Serialização depende do tipo subjacente da coleção. Por exemplo, se uma matriz de ponteiro digitada é baseada em CObArray, é serializable; se baseia em CPtrArray, não é serializable. Em geral, as classes de “Ptr” não pode ser serializados.
3. Se Sim marcado nessa coluna, uma classe de coleção de nontemplate é fortemente tipado fornecido você usará como pretendido. Por exemplo, se você armazenar bytes em CByteArray, a matriz será fortemente tipado. Mas se você usá-la para armazenar caracteres, é menos certeza de que a segurança de tipo.
Consulte também
Tarefas
Acessando todos os membros de uma coleção