Compartilhar via


Classes de coleção do ATL

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

  • A quantidade de dados sejam armazenados

  • Eficiência em vez de desempenho no acesso 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ção pequeno

ATL fornece as seguintes classes de matriz para lidar com um pequeno número de objetos.No entanto, essas classes são limitadas e projetados para ser usado internamente pelo ATL.Não é recomendável que você os utilize em seus programas.

Classe

Tipo de armazenamento de dados

CSimpleArray

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

CSimpleMap

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

Classes de coleção propósito geral

sistema autônomo classes a seguir implementam matrizes, listas e mapas e são fornecidas sistema autônomo classes de coleção de propósito geral:

Classe

Tipo de armazenamento de dados

CAtlArray

Implementa uma matriz.

CAtlList

Implementa uma lista.

CAtlMap

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

CRBMap

Implementa uma estrutura de mapeamento usando o algoritmo de Red-preta.

CRBMultiMap

Implementa uma estrutura multimapping vermelho-preto.

Essas classes interceptará muitos erros de programação quando usado em compilações de depurar, mas para fins de desempenho, essas verificações não serão executadas em compilações comerciais.

Classes de coleção especializados

Mais especializadas de coleções de classes também são fornecidas para o gerenciamento de memória ponteiros e ponteiros de interface:

Classe

Objetivo

CAutoPtrArray

Fornece métodos úteis ao construir uma matriz de SMART ponteiros.

CAutoPtrList

Fornece métodos úteis ao construir uma lista dos ponteiros inteligentes.

CComUnkArray

Armazenamentos de IUnknown ponteiros e é projetado para ser usado sistema autônomo um parâmetro para o IConnectionPointImplclasse de modelo .

CHeapPtrList

Fornece métodos úteis ao construir uma lista dos ponteiros de heap.

CInterfaceArray

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

CInterfaceList

Fornece métodos úteis ao construir uma lista dos ponteiros de interface COM.

Escolhendo uma classe de coleção

Cada uma das classes de coleção disponível oferece características de desempenho diferentes, sistema autônomo mostrado na tabela abaixo.

  • Colunas 2 e 3 descrevem cada classe de pedidos e características de acesso.Na tabela, o termo "ordenado" significa que a ordem em que itens são inseridas e excluídas determina a ordem na coleção; isso não significa que os itens são classificados em seu Sumário.O termo "indexado" significa que os itens na coleção podem ser recuperados por um índice de inteiro, como itens em uma matriz normal.

  • Colunas 4 e 5 descrevem o desempenho de cada classe.Em aplicativos que exigem muitos inserções na coleção, inserção velocidade pode ser especialmente importante; para outros aplicativos, velocidade de pesquisa pode ser mais importante.

  • Coluna 6 descreve se cada forma permite que elementos duplicados.

  • O desempenho de uma operação de classe determinada coleção é expressa em termos da relação entre o time necessário para concluir a operação e o número de elementos na coleção.Uma operação de levar um período de time que aumenta linearmente conforme o número de elementos aumenta é descrito sistema autônomo um algoritmo O(n).Por outro lado, uma operação de levar um período de time que aumenta a menos conforme o aumento do número de elementos é descrita sistema autônomo um algoritmo O (log n).Portanto, em termos de desempenho, O (log n) algoritmos superam O(n) algoritmos mais sistema autônomo o número de elementos incresistema autônomoes.

Recursos de forma da coleção

Forma

Solicitadas?

Indexado?

Inserir um

element

Procurar

elemento especificado

Duplicar

elementos?

List

Sim

Não

Rápida (time constante)

O(n) lenta

Sim

Matriz

Sim

Por int (time constante)

O(n) lenta, exceto se inserção no participante, no qual horário constante maiúsculas

O(n) lenta

Sim

MAP

Não

Pela chave (time constante)

Rápida (time constante)

Rápida (time constante)

Nenhum (chaves) Sim (valores)

MAP de vermelho-preto

Sim (por chave)

Pela chave O (log n)

O Fast (log n)

O Fast (log n)

Não

Multimap vermelho-preto

Sim (por chave)

Pela chave O(log n) (vários valores de chaves por)

O Fast (log n)

O Fast (log n)

Sim (vários valores de chaves por)

Usando objetos CTraits

sistema autônomo sistema autônomo classes de coleção ATL podem ser usadas para armazenar uma grande variedade de tipos de dados definidos pelo usuário, pode ser útil poder substituir funções importantes, sistema autônomo comparações.Isso é feito usando as classes CTraits.

Classes CTraits estão semelhante, mas mais flexível do que as funções do auxiliar de classe do MFC coleção; consulte Coleção classe auxiliares Para obter mais informações.

Ao construir sua classe de coleção, você tem a opção de especificar uma classe CTraits.Essa classe conterá o código que irá executar operações sistema autônomo comparações quando chamado por outros métodos que formam a classe de coleção.Por exemplo, se o objeto da lista contém suas próprias estruturas definidas pelo usuário, convém redefinir o teste de igualdade para comparar somente determinadas variáveis membro.Dessa forma, Find método a lista do objeto funcionará de maneira mais útil.

Exemplo

Có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 das classes CTraits, consulte Classes de coleção.

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

Exemplos de classes de coleção

Os exemplos a seguir demonstram as classes de coleção:

Consulte também

Conceitos

Classes de coleção

Outros recursos

Conceitos atl