Classe CAtlArray

Questa classe implementa un oggetto matrice.

Sintassi

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

Parametri

E
Tipo di dati da memorizzare nella matrice.

ETraits
Codice utilizzato per copiare o spostare elementi.

Membri

Metodi

Funzione Descrizione
Aggiunta Chiamare questo metodo per aggiungere un elemento all'oggetto matrice.
Aggiunta Chiamare questo metodo per aggiungere il contenuto di una matrice alla fine di un'altra.
AssertValid Chiamare questo metodo per verificare che l'oggetto matrice sia valido.
CAtlArray Costruttore.
~CAtlArray Distruttore.
Copia Chiamare questo metodo per copiare gli elementi di una matrice in un'altra.
FreeExtra Chiamare questo metodo per rimuovere tutti gli elementi vuoti dalla matrice.
GetAt Chiamare questo metodo per recuperare un singolo elemento dall'oggetto matrice.
GetCount Chiamare questo metodo per restituire il numero di elementi archiviati nella matrice.
GetData Chiamare questo metodo per restituire un puntatore al primo elemento della matrice.
InsertArrayAt Chiamare questo metodo per inserire una matrice in un'altra.
InsertAt Chiamare questo metodo per inserire un nuovo elemento (o più copie di un elemento) nell'oggetto matrice.
IsEmpty Chiamare questo metodo per verificare se la matrice è vuota.
RemoveAll Chiamare questo metodo per rimuovere tutti gli elementi dall'oggetto matrice.
RemoveAt Chiamare questo metodo per rimuovere uno o più elementi dalla matrice.
SetAt Chiamare questo metodo per impostare il valore di un elemento nell'oggetto matrice.
SetAtGrow Chiamare questo metodo per impostare il valore di un elemento nell'oggetto matrice, espandendo la matrice in base alle esigenze.
SetCount Chiamare questo metodo per impostare le dimensioni dell'oggetto matrice.

Operatori

Operatore Descrizione
operator [] Chiamare questo operatore per restituire un riferimento a un elemento nella matrice.

Typedef

Typedef Descrizione
INARGTYPE Tipo di dati da utilizzare per l'aggiunta di elementi alla matrice.
OUTARGTYPE Tipo di dati da utilizzare per il recupero di elementi dalla matrice.

Osservazioni:

CAtlArray fornisce metodi per la creazione e la gestione di una matrice di elementi di un tipo definito dall'utente. Anche se simile alle matrici C standard, l'oggetto CAtlArray può ridursi e crescere in modo dinamico in base alle esigenze. L'indice della matrice inizia sempre alla posizione 0 e il limite superiore può essere fisso oppure può espandersi man mano che vengono aggiunti nuovi elementi.

Per le matrici con un numero ridotto di elementi, è possibile usare la classe ATL CSimpleArray .

CAtlArray è strettamente correlato alla classe MFC CArray e funzionerà in un progetto MFC, anche se senza supporto di serializzazione.

Per altre informazioni, vedere Classi di raccolta ATL.

Requisiti

Intestazione: atlcoll.h

CAtlArray::Add

Chiamare questo metodo per aggiungere un elemento all'oggetto matrice.

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

Parametri

Elemento
Elemento da aggiungere alla matrice.

Valore restituito

Restituisce l'indice dell'elemento aggiunto.

Osservazioni:

Il nuovo elemento viene aggiunto alla fine della matrice. Se non viene fornito alcun elemento, viene aggiunto un elemento vuoto; ovvero, la matrice viene aumentata di dimensioni come se fosse stato aggiunto un elemento reale. Se l'operazione ha esito negativo, AtlThrow viene chiamato con l'argomento E_OUTOFMEMORY.

Esempio

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

Chiamare questo metodo per aggiungere il contenuto di una matrice alla fine di un'altra.

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

Parametri

aSrc
Matrice da accodare.

Valore restituito

Restituisce l'indice del primo elemento accodato.

Osservazioni:

Gli elementi nella matrice fornita vengono aggiunti alla fine della matrice esistente. Se necessario, la memoria verrà allocata per contenere i nuovi elementi.

Le matrici devono essere dello stesso tipo e non è possibile accodare una matrice a se stessa.

Nelle compilazioni di debug, verrà generato un ATLASSERT se l'argomento CAtlArray non è una matrice valida o se aSrc fa riferimento allo stesso oggetto. Nelle build di rilascio, gli argomenti non validi possono causare un comportamento imprevedibile.

Esempio

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

Chiamare questo metodo per verificare che l'oggetto matrice sia valido.

void AssertValid() const;

Osservazioni:

Se l'oggetto matrice non è valido, ATLASSERT genererà un'asserzione. Questo metodo è disponibile solo se è definito _DEBUG.

Esempio

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

CAtlArray::CAtlArray

Costruttore.

CAtlArray() throw();

Osservazioni:

Inizializza l'oggetto matrice.

Esempio

CAtlArray<int> iArray;   

CAtlArray::~CAtlArray

Distruttore.

~CAtlArray() throw();

Osservazioni:

Libera tutte le risorse usate dall'oggetto matrice.

CAtlArray::Copy

Chiamare questo metodo per copiare gli elementi di una matrice in un'altra.

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

Parametri

aSrc
Origine degli elementi da copiare in una matrice.

Osservazioni:

Chiamare questo metodo per sovrascrivere gli elementi di una matrice con gli elementi di un'altra matrice. Se necessario, la memoria verrà allocata per contenere i nuovi elementi. Non è possibile copiare elementi di una matrice in se stesso.

Se il contenuto esistente della matrice deve essere conservato, usare invece CAtlArray::Append .

Nelle compilazioni di debug, verrà generato un ATLASSERT se l'oggetto esistente CAtlArray non è valido o se aSrc fa riferimento allo stesso oggetto. Nelle build di rilascio, gli argomenti non validi possono causare un comportamento imprevedibile.

Nota

CAtlArray::Copy non supporta matrici costituite da elementi creati con la classe CAutoPtr .

Esempio

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

Chiamare questo metodo per rimuovere tutti gli elementi vuoti dalla matrice.

void FreeExtra() throw();

Osservazioni:

Tutti gli elementi vuoti vengono rimossi, ma le dimensioni e il limite superiore della matrice rimangono invariati.

Nelle compilazioni di debug verrà generato un elemento ATLASSERT se l'oggetto CAtlArray non è valido o se la matrice supererebbe le dimensioni massime.

CAtlArray::GetAt

Chiamare questo metodo per recuperare un singolo elemento dall'oggetto matrice.

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

Parametri

iElement
Valore di indice dell'elemento della matrice da restituire.

Valore restituito

Restituisce un riferimento all'elemento della matrice richiesto.

Osservazioni:

Nelle compilazioni di debug verrà generato un elemento ATLASSERT se iElement supera il numero di elementi nella matrice. Nelle build di rilascio, un argomento non valido può causare un comportamento imprevedibile.

Esempio

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

Chiamare questo metodo per restituire il numero di elementi archiviati nella matrice.

size_t GetCount() const throw();

Valore restituito

Restituisce il numero di elementi archiviati nella matrice.

Osservazioni:

Poiché il primo elemento della matrice si trova nella posizione 0, il valore restituito da GetCount è sempre 1 maggiore dell'indice più grande.

Esempio

Vedere l'esempio per CAtlArray::GetAt.

CAtlArray::GetData

Chiamare questo metodo per restituire un puntatore al primo elemento della matrice.

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

Valore restituito

Restituisce un puntatore alla posizione di memoria in cui è archiviato il primo elemento nella matrice. Se non sono disponibili elementi, viene restituito NULL.

Esempio

// 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 di dati da utilizzare per l'aggiunta di elementi alla matrice.

typedef ETraits::INARGTYPE INARGTYPE;

CAtlArray::InsertArrayAt

Chiamare questo metodo per inserire una matrice in un'altra.

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

Parametri

iStart
Indice in corrispondenza del quale deve essere inserita la matrice.

paNew
Matrice da inserire.

Osservazioni:

Gli elementi della matrice paNew vengono copiati nell'oggetto matrice, a partire dall'elemento iStart. Gli elementi della matrice esistenti vengono spostati per evitare di sovrascrivere.

Nelle compilazioni di debug, verrà generato un ATLASSERT se l'oggetto CAtlArray non è valido o se il puntatore paNew è NULL o non valido.

Nota

CAtlArray::InsertArrayAt non supporta matrici costituite da elementi creati con la classe CAutoPtr .

Esempio

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

Chiamare questo metodo per inserire un nuovo elemento (o più copie di un elemento) nell'oggetto matrice.

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

Parametri

iElement
Indice in cui inserire l'elemento o gli elementi.

Elemento
Valore dell'elemento o degli elementi da inserire.

nCount
Numero di elementi da aggiungere.

Osservazioni:

Inserisce uno o più elementi nella matrice, a partire dall'indice iElement. Gli elementi esistenti vengono spostati per evitare la sovrascrittura.

Nelle compilazioni di debug, verrà generato un ATLASSERT se l'oggetto CAtlArray non è valido, il numero di elementi da aggiungere è zero o il numero combinato di elementi è troppo grande per la matrice da contenere. Nelle build di vendita al dettaglio, il passaggio di parametri non validi può causare risultati imprevedibili.

Esempio

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

Chiamare questo metodo per verificare se la matrice è vuota.

bool IsEmpty() const throw();

Valore restituito

Restituisce true se la matrice è vuota, false in caso contrario.

Osservazioni:

La matrice viene detta vuota se non contiene elementi. Pertanto, anche se la matrice contiene elementi vuoti, non è vuota.

Esempio

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

Chiamare questo operatore per restituire un riferimento a un elemento nella matrice.

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

Parametri

iElement
Valore di indice dell'elemento della matrice da restituire.

Valore restituito

Restituisce un riferimento all'elemento della matrice richiesto.

Osservazioni:

Esegue una funzione simile a CAtlArray::GetAt. A differenza della classe MFC CArray, questo operatore non può essere usato come sostituto di CAtlArray::SetAt.

Nelle compilazioni di debug verrà generato un elemento ATLASSERT se iElement supera il numero totale di elementi nella matrice. Nelle build di vendita al dettaglio un parametro non valido può causare risultati imprevedibili.

CAtlArray::OUTARGTYPE

Tipo di dati da utilizzare per il recupero di elementi dalla matrice.

typedef ETraits::OUTARGTYPE OUTARGTYPE;

CAtlArray::RemoveAll

Chiamare questo metodo per rimuovere tutti gli elementi dall'oggetto matrice.

void RemoveAll() throw();

Osservazioni:

Rimuove tutti gli elementi dall'oggetto matrice.

Questo metodo chiama CAtlArray::SetCount per ridimensionare la matrice e successivamente libera qualsiasi memoria allocata.

Esempio

Vedere l'esempio per CAtlArray::IsEmpty.

CAtlArray::RemoveAt

Chiamare questo metodo per rimuovere uno o più elementi dalla matrice.

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

Parametri

iElement
Indice del primo elemento da rimuovere.

nCount
Numero di elementi da rimuovere.

Osservazioni:

Rimuove uno o più elementi dalla matrice. Tutti gli elementi rimanenti vengono spostati verso il basso. Il limite superiore viene decrementato, ma la memoria non viene liberata finché non viene effettuata una chiamata a CAtlArray::FreeExtra .

Nelle compilazioni di debug, verrà generato un ATLASSERT se l'oggetto CAtlArray non è valido o se il totale combinato di iElement e nCount supera il numero totale totale di elementi nella matrice. Nelle build di vendita al dettaglio, i parametri non validi possono causare risultati imprevedibili.

Esempio

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

Chiamare questo metodo per impostare il valore di un elemento nell'oggetto matrice.

void SetAt(size_t iElement, INARGTYPE element);

Parametri

iElement
Indice che punta all'elemento della matrice da impostare.

Elemento
Nuovo valore dell'elemento specificato.

Osservazioni:

Nelle compilazioni di debug verrà generato un elemento ATLASSERT se iElement supera il numero di elementi nella matrice. Nelle build di vendita al dettaglio un parametro non valido può causare risultati imprevedibili.

Esempio

Vedere l'esempio per CAtlArray::GetAt.

CAtlArray::SetCount

Chiamare questo metodo per impostare le dimensioni dell'oggetto matrice.

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

Parametri

nNewSize
Dimensione richiesta della matrice.

nGrowBy
Valore utilizzato per determinare la dimensione del buffer. Il valore -1 determina l'utilizzo di un valore calcolato internamente.

Valore restituito

Restituisce true se la matrice viene ridimensionata correttamente, false in caso contrario.

Osservazioni:

La matrice può essere aumentata o ridotta in dimensioni. Se viene aumentato, alla matrice vengono aggiunti elementi vuoti aggiuntivi. Se diminuito, gli elementi con gli indici più grandi verranno eliminati e la memoria liberata.

Usare questo metodo per impostare le dimensioni della matrice prima di usarla. Se SetCount non viene usato, il processo di aggiunta di elementi e l'allocazione di memoria successiva eseguita ridurrà le prestazioni e la memoria frammentata.

Esempio

Vedere l'esempio per CAtlArray::GetData.

CAtlArray::SetAtGrow

Chiamare questo metodo per impostare il valore di un elemento nell'oggetto matrice, espandendo la matrice in base alle esigenze.

void SetAtGrow(size_t iElement, INARGTYPE element);

Parametri

iElement
Indice che punta all'elemento della matrice da impostare.

Elemento
Nuovo valore dell'elemento specificato.

Osservazioni:

Sostituisce il valore dell'elemento a cui punta l'indice. Se iElement è maggiore della dimensione corrente della matrice, la matrice viene aumentata automaticamente usando una chiamata a CAtlArray::SetCount. Nelle compilazioni di debug, verrà generato un ATLASSERT se l'oggetto CAtlArray non è valido. Nelle build di vendita al dettaglio, i parametri non validi possono causare risultati imprevedibili.

Esempio

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

Vedi anche

Esempio di MMXSwarm
Esempio DynamicConsumer
Esempio updatePV
Esempio di marquee
Classe CArray
Cenni preliminari sulla classe