Partilhar via


Recomendações para escolher uma classe de coleção

Este artigo contém informações detalhadas projetadas para ajudá-lo a escolher uma classe de coleção para suas necessidades específicas de aplicativo.

A escolha de uma classe de coleção depende de vários fatores, incluindo:

  • Os recursos da forma de classe: ordem, indexação e desempenho, conforme mostrado na tabela Recursos da Forma de Coleção mais adiante neste tópico

  • Se a classe usa modelos C++

  • Se os elementos armazenados na coleção podem ser serializados

  • Se os elementos armazenados na coleção podem ser despejados para diagnóstico

  • Se a coleção é segura para tipos

A tabela abaixo, Características das Formas da Coleção, resume as características das formas de coleção disponíveis.

  • As colunas 2 e 3 descrevem a ordenação e as características de acesso de cada forma. Na tabela, o termo "ordenado" significa que a ordem em que os itens são inseridos e excluídos determina sua ordem na coleção; isso 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, muito parecido com os itens em uma matriz típica.

  • As colunas 4 e 5 descrevem o desempenho de cada forma. Em aplicações que requerem muitas inserções na coleção, a velocidade de inserção pode ser especialmente importante; Para outras aplicações, a velocidade de pesquisa pode ser mais importante.

  • A coluna 6 descreve se cada forma permite elementos duplicados.

Características de Forma da Coleção

Forma Encomendado Indexado Inserir um elemento Pesquisar elemento especificado Elementos duplicados
Lista Sim Não Rápido Lento Sim
Matriz Sim Por int Lento Lento Sim
Mapa Não Por chave Rápido Rápido Não (chaves) Sim (valores)

A tabela a seguir, Características das classes de coleção MFC, resume outras características importantes de classes de coleção MFC específicas como um guia para a seleção. Sua escolha pode depender se a classe é baseada em modelos C++, se seus elementos podem ser serializados por meio do mecanismo de serialização de documentos do MFC, se seus elementos podem ser despejados por meio do mecanismo de dumping de diagnóstico do MFC ou se a classe é segura para tipos — ou seja, se você pode garantir o tipo de elementos armazenados e recuperados de uma coleção com base na classe.

Características das classes de coleção MFC

Classe Usa C++

modelos
Pode ser

em série
Pode ser

descartado
É

tipo-seguro
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 Depende 2 Sim Sim
CTypedPtrList Sim Depende 2 Sim Sim
CTypedPtrMap Sim Depende 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 do Serialize objeto de coleção; para despejar, você deve chamar explicitamente sua Dump função. Não é possível usar o formulário ar << collObj para serializar ou o formulário dmp<< collObj para despejar.

  2. A serializabilidade depende do tipo de coleção subjacente. Por exemplo, se uma matriz de ponteiro tipada é baseada em CObArray, ela é serializável; se for baseada em CPtrArray, então não é serializável. Em geral, as classes "Ptr" não podem ser serializadas.

  3. Se marcado como Sim nesta coluna, uma classe de coleção não modelo é segura para digitação, desde que você a use como pretendido. Por exemplo, se armazenar bytes em um CByteArray, a matriz é segura em termos de tipos. Mas se o usar para armazenar caracteres, a sua tipagem torna-se menos segura.

Ver também

Coleções
Template-Based Aulas
Como fazer uma coleção Type-Safe
Acessando todos os membros de uma coleção