Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 |
Para serializar, você deve chamar explicitamente a função do
Serialize
objeto de coleção; para despejar, você deve chamar explicitamente suaDump
função. Não é possível usar o formulárioar << collObj
para serializar ou o formuláriodmp
<< collObj
para despejar.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 emCPtrArray
, então não é serializável. Em geral, as classes "Ptr" não podem ser serializadas.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