Compartir a través de


CAtlArray (clase)

Esta clase implementa un objeto de matriz.

Sintaxis

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

Parámetros

E
Tipo de datos que se va a almacenar en la matriz.

ETraits
Código usado para copiar o mover elementos.

Miembros

Métodos

Función Descripción
Add (Agregar) Llame a este método para agregar un elemento al objeto de matriz.
Anexar Llame a este método para agregar el contenido de una matriz al final de otra.
AssertValid Llame a este método para confirmar que el objeto de matriz es válido.
CAtlArray Constructor .
~CAtlArray El destructor .
Copiar Llame a este método para copiar los elementos de una matriz en otra.
FreeExtra Llame a este método para quitar los elementos vacíos de la matriz.
GetAt Llame a este método para recuperar un único elemento del objeto de matriz.
GetCount Llame a este método para devolver el número de elementos almacenados en la matriz.
GetData Llame a este método para devolver un puntero al primer elemento de la matriz.
InsertArrayAt Llame a este método para insertar una matriz en otra.
InsertAt Llame a este método para insertar un nuevo elemento (o varias copias de un elemento) en el objeto de matriz.
IsEmpty Llame a este método para probar si la matriz está vacía.
RemoveAll Llame a este método para quitar todos los elementos del objeto de matriz.
RemoveAt Llame a este método para quitar uno o varios elementos de la matriz.
SetAt Llame a este método para establecer el valor de un elemento en el objeto de matriz.
SetAtGrow Llame a este método para establecer el valor de un elemento en el objeto de matriz, expandiendo la matriz según sea necesario.
SetCount Llame a este método para establecer el tamaño del objeto de matriz.

Operadores

Operador Descripción
operator [] Llame a este operador para devolver una referencia a un elemento de la matriz.

Typedefs

Definición de tipo Descripción
INARGTYPE Tipo de datos que se va a usar para agregar elementos a la matriz.
OUTARGTYPE Tipo de datos que se va a usar para recuperar elementos de la matriz.

Comentarios

CAtlArray proporciona métodos para crear y administrar una matriz de elementos de un tipo definido por el usuario. Aunque es similar a las matrices de C estándar, el objeto CAtlArray puede reducir y crecer dinámicamente según sea necesario. El índice de matriz siempre comienza en la posición 0 y el límite superior se puede corregir o se puede expandir a medida que se agregan nuevos elementos.

Para matrices con un pequeño número de elementos, se puede usar la clase ATL CSimpleArray.

CAtlArray está estrechamente relacionado con la clase CArray de MFC y funcionará en un proyecto de MFC, aunque sin compatibilidad con la serialización.

Para obtener más información, consulte Clases de colección en ATL.

Requisitos

Encabezado: atlcoll.h

CAtlArray::Add

Llame a este método para agregar un elemento al objeto de matriz.

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

Parámetros

element
Elemento que se va a agregar a la matriz.

Valor devuelto

Índice del elemento agregado.

Comentarios

El nuevo elemento se agrega al final de la matriz. Si no se proporciona ningún elemento, se agrega un elemento vacío; es decir, la matriz aumenta de tamaño como si se hubiera agregado un elemento real. Si se produce un error en la operación, se llama a AtlThrow con el argumento E_OUTOFMEMORY.

Ejemplo

// 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

Llame a este método para agregar el contenido de una matriz al final de otra.

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

Parámetros

aSrc
Matriz que se va a anexar.

Valor devuelto

Devuelve el índice del primer elemento anexado.

Comentarios

Los elementos de la matriz proporcionada se agregan al final de la matriz existente. Si es necesario, se asignará memoria para acomodar los nuevos elementos.

Las matrices deben ser del mismo tipo y no es posible anexar una matriz a sí misma.

En las compilaciones de depuración, se generará un ATLASSERT si el argumento CAtlArray no es una matriz válida o si aSrc hace referencia al mismo objeto. En las compilaciones de versión, los argumentos no válidos pueden provocar un comportamiento impredecible.

Ejemplo

// 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

Llame a este método para confirmar que el objeto de matriz es válido.

void AssertValid() const;

Comentarios

Si el objeto de matriz no es válido, ATLASSERT iniciará una aserción. Este método solo está disponible si se define _DEBUG.

Ejemplo

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

CAtlArray::CAtlArray

Constructor .

CAtlArray() throw();

Comentarios

Inicializa el objeto de matriz.

Ejemplo

CAtlArray<int> iArray;   

CAtlArray::~CAtlArray

El destructor .

~CAtlArray() throw();

Comentarios

Libera los recursos utilizados por el objeto de matriz.

CAtlArray::Copy

Llame a este método para copiar los elementos de una matriz en otra.

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

Parámetros

aSrc
Origen de los elementos que se van a copiar en una matriz.

Comentarios

Llame a este método para sobrescribir elementos de una matriz con los elementos de otra matriz. Si es necesario, se asignará memoria para acomodar los nuevos elementos. No es posible copiar elementos de una matriz en sí misma.

Si se va a conservar el contenido existente de la matriz, use CAtlArray::Append en su lugar.

En las compilaciones de depuración, se generará un ATLASSERT si el objeto existente CAtlArray no es válido o si aSrc hace referencia al mismo objeto. En las compilaciones de versión, los argumentos no válidos pueden provocar un comportamiento impredecible.

Nota:

CAtlArray::Copy no admite matrices que constan de elementos creados con la clase CAutoPtr .

Ejemplo

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

Llame a este método para quitar los elementos vacíos de la matriz.

void FreeExtra() throw();

Comentarios

Se quitan los elementos vacíos, pero el tamaño y el límite superior de la matriz permanecen sin cambios.

En las compilaciones de depuración, se generará un ATLASSERT si el objeto CAtlArray no es válido o si la matriz superaría su tamaño máximo.

CAtlArray::GetAt

Llame a este método para recuperar un único elemento del objeto de matriz.

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

Parámetros

iElement
Valor de índice del elemento de matriz que se va a devolver.

Valor devuelto

Devuelve una referencia al prototipo para una matriz.

Comentarios

En las compilaciones de depuración, se generará un ATLASSERT si iElement supera el número de elementos de la matriz. En las compilaciones de versión, un argumento no válido puede provocar un comportamiento impredecible.

Ejemplo

// 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

Llame a este método para devolver el número de elementos almacenados en la matriz.

size_t GetCount() const throw();

Valor devuelto

Devuelve el número de elementos almacenados en la matriz.

Comentarios

Como el primer elemento de la matriz está en la posición 0, el valor devuelto por GetCount siempre es 1 mayor que el índice más grande.

Ejemplo

Consulte el ejemplo de CAtlArray::GetAt.

CAtlArray::GetData

Llame a este método para devolver un puntero al primer elemento de la matriz.

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

Valor devuelto

Devuelve un puntero al primer elemento de la matriz. Si no hay elementos disponibles, se devuelve NULL.

Ejemplo

// 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

Tipo de datos que se va a usar para agregar elementos a la matriz.

typedef ETraits::INARGTYPE INARGTYPE;

CAtlArray::InsertArrayAt

Llame a este método para insertar una matriz en otra.

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

Parámetros

iStart
Índice en el que se va a insertar la matriz.

paNew
Matriz que se va a insertar.

Comentarios

Los elementos de la matriz paNew se copian en el objeto de matriz, empezando por el elemento iStart. Los elementos de matriz existentes se mueven para evitar que se sobrescriban.

En las compilaciones de depuración, se generará un ATLASSERT si el objeto CAtlArray no es válido o si el puntero paNew es null o no es válido.

Nota:

CAtlArray::InsertArrayAt no admite matrices que constan de elementos creados con la clase CAutoPtr .

Ejemplo

// 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

Llame a este método para insertar un nuevo elemento (o varias copias de un elemento) en el objeto de matriz.

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

Parámetros

iElement
Índice donde se van a insertar el elemento o los elementos.

element
Valor de carácter de los elementos que se van a insertar.

nCount
Número de elementos que se van a omitir.

Comentarios

Inserta uno o varios elementos en la matriz, empezando por el índice iElement. Los elementos existentes se mueven para evitar que se sobrescriban.

En las compilaciones de depuración, se generará un ATLASSERT si el objeto CAtlArray no es válido, el número de elementos que se van a agregar es cero o el número combinado de elementos es demasiado grande para que la matriz contenga. En las compilaciones comerciales, el paso de parámetros no válidos puede provocar resultados imprevisibles.

Ejemplo

// 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

Llame a este método para probar si la matriz está vacía.

bool IsEmpty() const throw();

Valor devuelto

Devuelve TRUE si el mapa está vacío; si no, FALSE.

Comentarios

Se dice que la matriz está vacía si no contiene ningún elemento. Por lo tanto, incluso si la matriz contiene elementos vacíos, no está vacío.

Ejemplo

// 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 []

Llame a este operador para devolver una referencia a un elemento de la matriz.

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

Parámetros

iElement
Valor de índice del elemento de matriz que se va a devolver.

Valor devuelto

Devuelve una referencia al prototipo para una matriz.

Comentarios

Realiza una función similar a CAtlArray::GetAt. A diferencia de la clase MFC CArray, este operador no se puede usar como sustituto de CAtlArray::SetAt.

En las compilaciones de depuración, se generará un ATLASSERT si iElement supera el número total de elementos de la matriz. En las compilaciones comerciales, un parámetro no válido puede provocar resultados imprevisibles.

CAtlArray::OUTARGTYPE

Tipo de datos que se va a usar para recuperar elementos de la matriz.

typedef ETraits::OUTARGTYPE OUTARGTYPE;

CAtlArray::RemoveAll

Llame a este método para quitar todos los elementos del objeto de matriz.

void RemoveAll() throw();

Comentarios

Quita todos los elementos del objeto de matriz.

Este método llama a CAtlArray::SetCount para cambiar el tamaño de la matriz y, posteriormente, libera cualquier memoria asignada.

Ejemplo

Consulte el ejemplo de CAtlArray::IsEmpty.

CAtlArray::RemoveAt

Llame a este método para quitar uno o varios elementos de la matriz.

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

Parámetros

iElement
Índice del primer elemento que se va a ordenar.

nCount
Número de elementos que se va a quitar.

Comentarios

Quita uno o varios elementos de la matriz. Los elementos restantes se desplazan hacia abajo. El límite superior se disminuye, pero la memoria no se libera hasta que se realiza una llamada a CAtlArray::FreeExtra.

En las compilaciones de depuración, se generará un ATLASSERT si el objeto CAtlArray no es válido o si el total combinado de iElement y nCount supera el número total de elementos de la matriz. En las compilaciones comerciales, los parámetros no válidos pueden provocar resultados impredecibles.

Ejemplo

// 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

Llame a este método para establecer el valor de un elemento en el objeto de matriz.

void SetAt(size_t iElement, INARGTYPE element);

Parámetros

iElement
Índice que apunta al elemento de matriz que se va a establecer.

element
Nuevo valor del elemento especificado.

Comentarios

En las compilaciones de depuración, se generará un ATLASSERT si iElement supera el número de elementos de la matriz. En las compilaciones comerciales, un parámetro no válido puede dar lugar a resultados imprevisibles.

Ejemplo

Consulte el ejemplo de CAtlArray::GetAt.

CAtlArray::SetCount

Llame a este método para establecer el tamaño del objeto de matriz.

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

Parámetros

nNewSize
Tamaño requerido de la matriz.

nGrowBy
Valor que se usa para determinar el tamaño del búfer. Un valor de -1 hace que se use un valor calculado internamente.

Valor devuelto

Devuelve true si la matriz se cambia correctamente de tamaño; en caso contrario, false.

Comentarios

La matriz se puede aumentar o reducir en tamaño. Si aumenta, se agregan elementos vacíos adicionales a la matriz. Si se reduce, los elementos con los índices más grandes se eliminarán y se liberará memoria.

Use este método para establecer el tamaño de la matriz antes de usarlo. Si no se usa SetCount, el proceso de agregar elementos (y la asignación de memoria posterior realizada) reducirá el rendimiento y la memoria de fragmentos.

Ejemplo

Consulte el ejemplo de CAtlArray::GetData.

CAtlArray::SetAtGrow

Llame a este método para establecer el valor de un elemento en el objeto de matriz, expandiendo la matriz según sea necesario.

void SetAtGrow(size_t iElement, INARGTYPE element);

Parámetros

iElement
Índice que apunta al elemento de matriz que se va a establecer.

element
Nuevo valor del elemento especificado.

Comentarios

Reemplaza el valor del elemento al que apunta el índice. Si iElement es mayor que el tamaño actual de la matriz, la matriz aumenta automáticamente con una llamada a CAtlArray::SetCount. En las compilaciones de depuración, se generará un ATLASSERT si el objeto CAtlArray no es válido. En las compilaciones comerciales, los parámetros no válidos pueden provocar resultados impredecibles.

Ejemplo

// 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.

Consulte también

MMXSwarm Sample
Ejemplo DynamicConsumer
UpdatePV Sample
Ejemplo de marquesina
CArray (clase)
Información general sobre la clase