Compartilhar via


Classe CAtlArray

Essa classe implementa um objeto de matriz.

Sintaxe

template<typename E, class ETraits = CElementTraits<E>>
class CAtlArray

Parâmetros

E
O tipo de dados a serem armazenados na matriz.

ETraits
O código usado para copiar ou mover elementos.

Membros

Métodos

Função Descrição
Add Chame esse método para adicionar um elemento ao objeto de matriz.
Append Chame esse método para adicionar o conteúdo de uma matriz ao final de outra.
AssertValid Chame esse método para confirmar se o objeto de matriz é válido.
CAtlArray O construtor .
~CAtlArray O destruidor.
Copy Chame esse método para copiar os elementos de uma matriz para outra.
FreeExtra Chame esse método para remover todos os elementos vazios da matriz.
GetAt Chame esse método para recuperar um único elemento do objeto de matriz.
GetCount Chame esse método para retornar o número de elementos armazenados na matriz.
GetData Chame esse método para retornar um ponteiro para o primeiro elemento na matriz.
InsertArrayAt Chame esse método para inserir uma matriz em outra.
InsertAt Chame esse método para inserir um novo elemento (ou várias cópias de um elemento) no objeto de matriz.
IsEmpty Chame esse método para testar se a matriz está vazia.
RemoveAll Chame esse método para remover todos os elementos do objeto de matriz.
RemoveAt Chame esse método para remover um ou mais elementos da matriz.
SetAt Chame esse método para definir o valor de um elemento no objeto de matriz.
SetAtGrow Chame esse método para definir o valor de um elemento no objeto de matriz, expandindo a matriz conforme necessário.
SetCount Chame esse método para definir o tamanho do objeto de matriz.

Operadores

Operador Descrição
operator [] Chame esse operador para retornar uma referência a um elemento na matriz.

Typedefs

Typedef Descrição
INARGTYPE O tipo de dados a ser usado para adicionar elementos à matriz.
OUTARGTYPE O tipo de dados a ser usado para recuperar elementos da matriz.

Comentários

CAtlArray fornece métodos para criar e gerenciar uma matriz de elementos de um tipo definido pelo usuário. Embora semelhante a matrizes C padrão, o objeto CAtlArray pode reduzir e crescer dinamicamente conforme necessário. O índice de matriz sempre começa na posição 0 e o limite superior pode ser corrigido ou pode ser expandido à medida que novos elementos são adicionados.

Para matrizes com um pequeno número de elementos, a classe ATL CSimpleArray pode ser usada.

CAtlArray está intimamente relacionado à classe CArray da MFC e funcionará em um projeto MFC, embora sem suporte para serialização.

Para obter mais informações, confira Classes de Coleção da ATL.

Requisitos

Cabeçalho: atlcoll.h

CAtlArray::Add

Chame esse método para adicionar um elemento ao objeto de matriz.

size_t Add(INARGTYPE element);
size_t Add();

Parâmetros

element
O elemento a ser adicionado à matriz.

Valor de retorno

Retorna o índice do elemento adicionado.

Comentários

O novo elemento é adicionado ao final da matriz. Se nenhum elemento for fornecido, um elemento vazio será adicionado; ou seja, a matriz é aumentada em tamanho como se um elemento real tivesse sido adicionado. Se a operação falhar, AtlThrow será chamado com o argumento E_OUTOFMEMORY.

Exemplo

// Declare an array of integers
CAtlArray<int> iArray;

iArray.Add(1);   // element 0
iArray.Add(2);   // element 1
iArray.Add();    // element 2

ATLASSERT(iArray.GetCount() == 3);   

CAtlArray::Append

Chame esse método para adicionar o conteúdo de uma matriz ao final de outra.

size_t Append(const CAtlArray<E, ETraits>& aSrc);

Parâmetros

aSrc
A matriz a ser acrescentada.

Valor de retorno

Retorna o índice do primeiro elemento acrescentado.

Comentários

Os elementos na matriz fornecida são adicionados ao final da matriz existente. Se necessário, a memória será alocada para acomodar os novos elementos.

As matrizes devem ser do mesmo tipo e não é possível acrescentar uma matriz a si mesma.

Em builds de depuração, um ATLASSERT será gerado se o argumento CAtlArray não for uma matriz válida ou se aSrc se referir ao mesmo objeto. Em builds de versão, argumentos inválidos podem levar a um comportamento imprevisível.

Exemplo

// Declare two integer arrays
CAtlArray<int> iArray1,iArray2;

iArray1.Add(1);   // element 0
iArray1.Add(2);   // element 1

iArray2.Add(3);   // element 0
iArray2.Add(4);   // element 1

// Append iArray2 to iArray1
iArray1.Append(iArray2);

ATLASSERT(iArray1.GetCount() == 4);   

CAtlArray::AssertValid

Chame esse método para confirmar se o objeto de matriz é válido.

void AssertValid() const;

Comentários

Se o objeto de matriz não for válido, ATLASSERT lançará uma declaração. Esse método estará disponível somente se _DEBUG estiver definido.

Exemplo

CAtlArray<float> fArray;
// AssertValid only exists in debug builds
#ifdef _DEBUG
fArray.AssertValid();   
#endif

CAtlArray::CAtlArray

O construtor .

CAtlArray() throw();

Comentários

Inicializa o objeto de matriz.

Exemplo

CAtlArray<int> iArray;   

CAtlArray::~CAtlArray

O destruidor.

~CAtlArray() throw();

Comentários

Libera todos os recursos usados pelo objeto de matriz.

CAtlArray::Copy

Chame esse método para copiar os elementos de uma matriz para outra.

void Copy(const CAtlArray<E, ETraits>& aSrc);

Parâmetros

aSrc
A origem dos elementos a serem copiados para uma matriz.

Comentários

Chame esse método para substituir elementos de uma matriz pelos elementos de outra matriz. Se necessário, a memória será alocada para acomodar os novos elementos. Não é possível copiar elementos de uma matriz para si mesma.

Se o conteúdo existente da matriz for mantido, use CAtlArray::Append.

Em builds de depuração, um ATLASSERT será gerado se o objeto CAtlArray existente não for válido ou se aSrc se referir ao mesmo objeto. Em builds de versão, argumentos inválidos podem levar a um comportamento imprevisível.

Observação

CAtlArray::Copy não dá suporte a matrizes que consistem em elementos criados com a classe CAutoPtr.

Exemplo

CAtlArray<int> iArrayS, iArrayT;

iArrayS.Add(1);
iArrayS.Add(2);

iArrayT.Add(3);
iArrayT.Add(4);

iArrayT.Copy(iArrayS);

ATLASSERT(iArrayT.GetCount() == 2);
ATLASSERT(iArrayT[0] == 1);
ATLASSERT(iArrayT[1] == 2);   

CAtlArray::FreeExtra

Chame esse método para remover todos os elementos vazios da matriz.

void FreeExtra() throw();

Comentários

Todos os elementos vazios são removidos, mas o tamanho e o limite superior da matriz permanecem inalterados.

Em builds de depuração, um ATLASSERT será gerado se o objeto CAtlArray não for válido ou se a matriz exceder o tamanho máximo.

CAtlArray::GetAt

Chame esse método para recuperar um único elemento do objeto de matriz.

const E& GetAt(size_t iElement) const throw();
E& GetAt(size_t iElement) throw();

Parâmetros

iElement
O valor do índice do elemento de matriz a ser retornado.

Valor de retorno

Retorna uma referência ao elemento exigido da matriz.

Comentários

Em builds de depuração, um ATLASSERT será gerado se o iElement exceder o número de elementos na matriz. Em builds de versão, um argumento inválido pode levar a um comportamento imprevisível.

Exemplo

// Declare an array of integers

CAtlArray<int> iMyArray;
int element;

// Add ten elements to the array
for (int i = 0; i < 10; i++)
{
   iMyArray.Add(i);
}

// Use GetAt and SetAt to modify
// every element in the array

for (size_t i = 0; i < iMyArray.GetCount(); i++)
{
   element = iMyArray.GetAt(i);
   element *= 10;
   iMyArray.SetAt(i, element);
}   

CAtlArray::GetCount

Chame esse método para retornar o número de elementos armazenados na matriz.

size_t GetCount() const throw();

Valor de retorno

Retorna o número de elementos armazenados na matriz.

Comentários

Como o primeiro elemento na matriz está na posição 0, o valor retornado por GetCount é sempre 1 maior que o maior índice.

Exemplo

Confira o exemplo de CAtlArray::GetAt.

CAtlArray::GetData

Chame esse método para retornar um ponteiro para o primeiro elemento na matriz.

E* GetData() throw();
const E* GetData() const throw();

Valor de retorno

Retorna um ponteiro para a localização de memória que armazena o primeiro elemento na matriz. Se nenhum elemento estiver disponível, NULL será retornado.

Exemplo

// Define an array of integers
CAtlArray<int> MyArray;

// Define a pointer
int* pData;

// Allocate enough space for 32 elements
// with buffer increase to be calculated
// automatically
MyArray.SetCount(32, -1);

// Set the pointer to the first element
pData = MyArray.GetData();

// Set array values directly
for (int j = 0; j < 32; j++, pData++)
{
   *pData = j * 10;   
}

CAtlArray::INARGTYPE

O tipo de dados a ser usado para adicionar elementos à matriz.

typedef ETraits::INARGTYPE INARGTYPE;

CAtlArray::InsertArrayAt

Chame esse método para inserir uma matriz em outra.

void InsertArrayAt(size_t iStart, const CAtlArray<E, ETraits>* paNew);

Parâmetros

iStart
O índice no qual a matriz deve ser inserida.

paNew
A matriz a ser inserida.

Comentários

Os elementos da matriz paNew são copiados para o objeto de matriz, começando no elemento iStart. Os elementos de matriz existentes são movidos para evitar serem substituídos.

Em builds de depuração, um ATLASSERT será gerado se o objeto CAtlArray não for válido ou se o ponteiro paNew for NULL ou inválido.

Observação

CAtlArray::InsertArrayAt não dá suporte a matrizes que consistem em elementos criados com a classe CAutoPtr.

Exemplo

// Define two integer arrays
CAtlArray<int> iTargetArray, iSourceArray;

// Add elements to first array
for (int x = 0; x < 10; x++)
{
   iTargetArray.Add(x);
}

// Add elements to the second array
for (int x = 0; x < 10; x++)
{
   iSourceArray.Add(x * 10);
}

// Insert the Source array into the Target
// array, starting at the 5th element.
iTargetArray.InsertArrayAt(5, &iSourceArray);   

CAtlArray::InsertAt

Chame esse método para inserir um novo elemento (ou várias cópias de um elemento) no objeto de matriz.

void InsertAt(size_t iElement, INARGTYPE element, size_t nCount = 1);

Parâmetros

iElement
O índice em que o elemento ou os elementos devem ser inseridos.

element
O valor do elemento ou elementos a serem inseridos.

nCount
O número de elementos a serem adicionados.

Comentários

Insere um ou mais elementos na matriz, começando no índice iElement. Os elementos existentes são movidos para evitar serem substituídos.

Em builds de depuração, um ATLASSERT será gerado se o objeto CAtlArray for inválido, o número de elementos a serem adicionados for zero ou o número combinado de elementos for muito grande para a matriz conter. Em builds de varejo, passar parâmetros inválidos pode causar resultados imprevisíveis.

Exemplo

// Declare an array of integers
CAtlArray<int> iBuffer;

// Add elements to the array
for (int b = 0; b < 10; b++)
{
   iBuffer.Add(0);
}

// Instert ten 1's into the array
// at position 5
iBuffer.InsertAt(5, 1, 10);   

CAtlArray::IsEmpty

Chame esse método para testar se a matriz está vazia.

bool IsEmpty() const throw();

Valor de retorno

Retornará true se a matriz estiver vazia. Caso contrário, retornará false.

Comentários

Diz-se que a matriz está vazia se não contiver elementos. Portanto, mesmo que a matriz contenha elementos vazios, ela não estará vazia.

Exemplo

// Define an array of chars
CAtlArray<char> cArray;

// Add an element
cArray.Add('a');

// Confirm array is not empty
ATLASSERT(!cArray.IsEmpty());

// Remove all elements
cArray.RemoveAll();

// Confirm array is empty
ATLASSERT(cArray.IsEmpty());   

CAtlArray::operator []

Chame esse operador para retornar uma referência a um elemento na matriz.

E& operator[](size_t ielement) throw();
const E& operator[](size_t ielement) const throw();

Parâmetros

iElement
O valor do índice do elemento de matriz a ser retornado.

Valor de retorno

Retorna uma referência ao elemento exigido da matriz.

Comentários

Executa uma função semelhante a CAtlArray::GetAt. Ao contrário da classe da MFC CArray, esse operador não pode ser usado como um substituto para CAtlArray::SetAt.

Em builds de depuração, um ATLASSERT será gerado se o iElement exceder o número total de elementos na matriz. Em builds de varejo, um parâmetro inválido pode causar resultados imprevisíveis.

CAtlArray::OUTARGTYPE

O tipo de dados a ser usado para recuperar elementos da matriz.

typedef ETraits::OUTARGTYPE OUTARGTYPE;

CAtlArray::RemoveAll

Chame esse método para remover todos os elementos do objeto de matriz.

void RemoveAll() throw();

Comentários

Remove todos os elementos do objeto de matriz.

Esse método chama CAtlArray::SetCount para redimensionar a matriz e, posteriormente, libera qualquer memória alocada.

Exemplo

Confira o exemplo de CAtlArray::IsEmpty.

CAtlArray::RemoveAt

Chame esse método para remover um ou mais elementos da matriz.

void RemoveAt(size_t iElement, size_t nCount = 1);

Parâmetros

iElement
O índice do primeiro elemento a ser removido.

nCount
O número de elementos a serem removidos.

Comentários

Remove um ou mais elementos da matriz. Todos os elementos restantes são deslocados para baixo. O limite superior é decrementado, mas a memória não é liberada até que uma chamada para CAtlArray::FreeExtra seja feita.

Em builds de depuração, um ATLASSERT será gerado se o objeto CAtlArray não for válido ou se o total combinado de iElement e nCount exceder o número total de elementos na matriz. Em builds de varejo, parâmetros inválidos podem causar resultados imprevisíveis.

Exemplo

// Declare an array of chars
CAtlArray<char> cMyArray;

// Add ten elements to the array
for (int a = 0; a < 10; a++)
{
   cMyArray.Add('*');
}

// Remove five elements starting with
// the element at position 1
cMyArray.RemoveAt(1, 5);

// Free memory
cMyArray.FreeExtra();

// Confirm size of array
ATLASSERT(cMyArray.GetCount() == 5);   

CAtlArray::SetAt

Chame esse método para definir o valor de um elemento no objeto de matriz.

void SetAt(size_t iElement, INARGTYPE element);

Parâmetros

iElement
O índice que aponta para o elemento de matriz a ser definido.

element
O novo valor do elemento especificado.

Comentários

Em builds de depuração, um ATLASSERT será gerado se o iElement exceder o número de elementos na matriz. Em builds de varejo, um parâmetro inválido pode acarretar resultados imprevisíveis.

Exemplo

Confira o exemplo de CAtlArray::GetAt.

CAtlArray::SetCount

Chame esse método para definir o tamanho do objeto de matriz.

bool SetCount(size_t nNewSize, int nGrowBy = - 1);

Parâmetros

nNewSize
O tamanho necessário da matriz.

nGrowBy
Um valor usado para determinar o tamanho do buffer. Um valor de -1 faz com que um valor calculado internamente seja usado.

Valor de retorno

Retornará true se a matriz for redimensionada com êxito. Caso contrário, false.

Comentários

A matriz pode ser aumentada ou reduzida de tamanho. Se aumentada, elementos vazios extras serão adicionados à matriz. Se reduzida, os elementos com os maiores índices serão excluídos e a memória será liberada.

Use esse método para definir o tamanho da matriz antes de usá-la. Se SetCount não for usado, o processo de adição de elementos – e a alocação de memória subsequente executada – reduzirá o desempenho e a memória do fragmento.

Exemplo

Confira o exemplo de CAtlArray::GetData.

CAtlArray::SetAtGrow

Chame esse método para definir o valor de um elemento no objeto de matriz, expandindo a matriz conforme necessário.

void SetAtGrow(size_t iElement, INARGTYPE element);

Parâmetros

iElement
O índice que aponta para o elemento de matriz a ser definido.

element
O novo valor do elemento especificado.

Comentários

Substitui o valor do elemento apontado pelo índice. Se iElement for maior que o tamanho atual da matriz, esta será automaticamente aumentada usando uma chamada para CAtlArray::SetCount. Em builds de depuração, um ATLASSERT será gerado se o objeto CAtlArray não for válido. Em builds de varejo, parâmetros inválidos podem causar resultados imprevisíveis.

Exemplo

// Declare an array of integers
CAtlArray<int> iGrowArray;

// Add an element
iGrowArray.Add(0);

// Add an extra element at position 19.
// This will grow the array to accommodate.
iGrowArray.SetAtGrow(19, 0);

// Confirm size of new array
ATLASSERT(iGrowArray.GetCount() == 20);

// Note: the values at position 1 to 18
// are undefined.

Confira também

MMXSwarm Sample
Exemplo de DynamicConsumer
Amostra de UpdatePV
Amostra de letreiro
Classe CArray
Visão geral da aula