Compartilhar via


Classes de coleção de ATL

ATL fornece muitas classes para armazenar e acessar dados.Classe que você decidir usar depende de vários fatores, incluindo:

  • A quantidade de dados a serem armazenados

  • Eficiência contra o desempenho sobre acessar os dados

  • A capacidade de acessar os dados pelo índice ou por chave

  • Como os dados são ordenados

  • Preferência pessoal

Classes de coleções pequenas

ATL fornece as seguintes classes de matriz para manipular um pequeno número de objetos.Em o entanto, essas classes são limitadas e criadas para uso internamente por ATL.Não é recomendável que você usa nos seus programas.

Classe

Tipo de armazenamento de dados

CSimpleArray

Implementa uma classe de matriz para manipular um pequeno número de objetos.

CSimpleMap

Implementa uma classe de mapeamento para manipular um pequeno número de objetos.

Classes de coleção comumente usadas

As classes a seguir implementam, listas, matrizes e mapeia e são fornecidas como a coleção comumente usadas classe:

Classe

Tipo de armazenamento de dados

CAtlArray

Implementa uma matriz.

CAtlList

Implementa uma lista.

CAtlMap

Implementa uma estrutura de mapeamento, pelo qual os dados podem ser referenciados por chave ou por valor.

CRBMap

Implementa uma estrutura de mapeamento usando o algoritmo Vermelho- Preto.

CRBMultiMap

Implementa uma estrutura multimapping Vermelho-Preta.

Essas classes interceptarão muitos erros de programação quando usadas em compilações de depuração, mas para a causa de desempenho, essas verificações não serão executadas em construções varejistas.

Classes de coleção especializadas

As classes mais especializadas de coleção são fornecidas também gerenciando ponteiros de memória e ponteiros a interface:

Classe

Objetivo

CAutoPtrArray

Fornece métodos úteis quando construir uma matriz de ponteiros inteligentes.

CAutoPtrList

Fornece métodos úteis quando construir uma lista de ponteiros inteligentes.

CComUnkArray

Armazena ponteiros de IUnknown e é projetado para ser usado como um parâmetro para a classe de modelo de IConnectionPointImpl .

CHeapPtrList

Fornece métodos úteis quando construir uma lista de ponteiros da heap.

CInterfaceArray

Fornece métodos úteis quando construir uma matriz de ponteiros da interface COM.

CInterfaceList

Fornece métodos úteis quando construir uma lista de ponteiros da interface COM.

Escolhendo uma classe de coleção

Cada uma das classes disponíveis de coleção oferece características de desempenho diferentes, como mostrado na tabela abaixo.

  • As colunas 2 e 3 descrevem cada classe de ordenação e acessam características.Em a tabela, o termo “pediu” significa que a ordem em que os itens excluídos são inseridos e determina a ordem na coleção; não significa que os itens são classificadas em seu conteúdo.O termo “indexado” significa que os itens na 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 classe.Em aplicativos que requerem várias 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.

  • Descreve a coluna 6 se cada formulário permite elementos duplicados.

  • O desempenho de uma operação determinada de classe de coleção é expresso em termos de relação entre o tempo necessário para concluir a operação e o número de elementos na coleção.Uma operação que leva uma quantidade de tempo que aumenta linear como o número de gera de elementos é descrito como um algoritmo (O)n.Por outro lado, uma operação que recebe um período de tempo que disparam sempre menor que o número de gera de elementos é descrito como um algoritmo de O (log) em.Portanto, em termos de desempenho, algoritmos de O (log) em O outperform (em) algoritmos sempre mais como o número de elementos aumenta.

Recursos de forma de coleção

Forma

Ordenada?

Indexado?

Insira

elemento

Procure por

elemento especificado

Duplicate

elementos?

List

Sim

Não

Rápido (tempo constantes)

O lento (em)

Sim

Matriz

Sim

Int (tempo por constantes)

Desacelerar O (em) exceto se inserção no final, em esse caso constante cronometra

O lento (em)

Sim

Mapa

Não

Por chave (tempo constantes)

Rápido (tempo constantes)

Rápido (tempo constantes)

Não (chaves) Sim (valores)

Mapa Vermelho-Preto

Sim (por chave)

Por chave em O (log)

Rápido no (log)

Rápido no (log)

Não

Multimap Vermelho-Preto

Sim (por chave)

Por chave em O (log) (vários valores por chave)

Rápido no (log)

Rápido no (log)

Sim (vários valores por chave)

Usando objetos de CTraits

Como as classes de coleção de ATL podem ser usadas para armazenar uma ampla variedade de tipos de dados definidos pelo usuário, pode ser útil poder substituir funções importantes como comparações.Isso é conseguido usando as classes de CTraits.

As classes de CTraits são semelhantes a, mas mais flexíveis do que, as funções auxiliares de classe de coleção MFC; consulte Coleção classe auxiliares para mais informações.

Quando construir sua classe de coleção, você tem a opção de especificar uma classe de CTraits.Essa classe conterá o código que irá executar operações como comparações quando chamado pelos outros métodos que compõem a classe de coleção.Por exemplo, se seu objeto de lista contém suas próprias estruturas definidos pelo usuário, você pode querer redefinir o teste de igualdade para comparar somente certos variáveis de membro.Assim, o método de localização do objeto de lista operar-se-á de uma maneira mais útil.

Exemplo

15e672bd.collapse_all(pt-br,VS.110).gifCódigo

// Collection class / traits class example.
// This program demonstrates using a CTraits class
// to create a new comparison operator.

#define MAX_STRING 80

// Define our own data type to store in the list.

struct MyData 
{
   int ID;
   TCHAR name[MAX_STRING];
   TCHAR address[MAX_STRING];
};

// Define our own traits class, making use of the
// existing traits and overriding only the comparison
// we need.

class MyTraits : public CElementTraits< MyData >
{
public:
    // Override the comparison to only compare
    // the ID value.

   static bool CompareElements(const MyData& element1, const MyData& element2)
   {
      if (element1.ID == element2.ID)
         return true;
      else
         return false;
   };
};

void DoAtlCustomTraitsList()
{
   // Declare the array, with our data type and traits class 

   CAtlList < MyData, MyTraits > MyList;

   // Create some variables of our data type

   MyData add_item, search_item;

   // Add some elements to the list.

   add_item.ID = 1;
   _stprintf_s(add_item.name, _T("Rumpelstiltskin"));
   _stprintf_s(add_item.address, _T("One Grimm Way"));

   MyList.AddHead(add_item);

   add_item.ID = 2;
   _stprintf_s(add_item.name, _T("Rapunzel"));
   _stprintf_s(add_item.address, _T("One Grimm Way"));

   MyList.AddHead(add_item);

   add_item.ID = 3;
   _stprintf_s(add_item.name, _T("Cinderella"));
   _stprintf_s(add_item.address, _T("Two Grimm Way"));

   MyList.AddHead(add_item);

   // Create an element which will be used
   // to search the list for a match.

   search_item.ID = 2;
   _stprintf_s(search_item.name, _T("Don't care"));
   _stprintf_s(search_item.address, _T("Don't care"));

   // Perform a comparison by searching for a match
   // between any element in the list, and our
   // search item. This operation will use the
   // (overridden) comparison operator and will
   // find a match when the IDs are the same.

   POSITION i;

   i = MyList.Find(search_item);

   if (i != NULL)
      _tprintf_s(_T("Item found!\n"));
   else
      _tprintf_s(_T("Item not found.\n"));
}

Comentários

Para obter uma lista de classes de CTraits, consulte Classes de coleção.

O diagrama a seguir mostra a hierarquia de classe para as classes de CTraits.

Hierarquia de características de Classes de coleção

A coleção de classes de exemplos

Os seguintes exemplos mostram as classes de coleção:

Consulte também

Conceitos

Classes de coleção

Outros recursos

Conceitos de ATL