Freigeben über


CAtlArray-Klasse

Diese Klasse implementiert ein Arrayobjekt.

Syntax

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

Parameter

E
Der Typ der im Array gespeicherten Daten.

ETraits
Der Code zum Kopieren oder Verschieben von Elementen.

Member

Methoden

Funktion Beschreibung
Add (Hinzufügen) Rufen Sie diese Methode auf, um dem Arrayobjekt ein Element hinzuzufügen.
Append (Anfügen) Rufen Sie diese Methode auf, um den Inhalt eines Arrays am Ende eines anderen hinzuzufügen.
AssertValid Rufen Sie diese Methode auf, um zu bestätigen, dass das Arrayobjekt gültig ist.
CAtlArray Der Konstruktor.
~CAtlArray Der Destruktor.
Kopieren Rufen Sie diese Methode auf, um die Elemente eines Arrays in ein anderes zu kopieren.
FreeExtra Rufen Sie diese Methode auf, um alle leeren Elemente aus dem Array zu entfernen.
GetAt Rufen Sie diese Methode auf, um ein einzelnes Element aus dem Arrayobjekt abzurufen.
GetCount Rufen Sie diese Methode auf, um die Anzahl der im Array gespeicherten Elemente zurückzugeben.
GetData Rufen Sie diese Methode auf, um einen Zeiger auf das erste Element im Array zurückzugeben.
InsertArrayAt Rufen Sie diese Methode auf, um ein Array in ein anderes einzufügen.
InsertAt Rufen Sie diese Methode auf, um ein neues Element (oder mehrere Kopien eines Elements) in das Arrayobjekt einzufügen.
IsEmpty Rufen Sie diese Methode auf, um zu testen, ob das Array leer ist.
RemoveAll Rufen Sie diese Methode auf, um alle Elemente aus dem Arrayobjekt zu entfernen.
RemoveAt Rufen Sie diese Methode auf, um ein oder mehrere Elemente aus dem Array zu entfernen.
SetAt Rufen Sie diese Methode auf, um den Wert eines Elements im Arrayobjekt festzulegen.
SetAtGrow Rufen Sie diese Methode auf, um den Wert eines Elements im Arrayobjekt festzulegen und das Array nach Bedarf zu erweitern.
SetCount Rufen Sie diese Methode auf, um die Größe des Arrayobjekts festzulegen.

Operatoren

Operator Beschreibung
operator [] Rufen Sie diesen Operator auf, um einen Verweis auf ein Element im Array zurückzugeben.

TypeDefs

TypeDef Beschreibung
INARGTYPE Der Datentyp, der zum Hinzufügen von Elementen zum Array verwendet werden soll.
OUTARGTYPE Der Datentyp, der zum Abrufen von Elementen aus dem Array verwendet werden soll.

Hinweise

CAtlArray stellt Methoden zum Erstellen und Verwalten eines Arrays von Elementen eines benutzerdefinierten Typs bereit. Ähnlich wie standardmäßige C-Arrays kann das CAtlArray Objekt bei Bedarf dynamisch verkleinern und wachsen. Der Arrayindex beginnt immer an Position 0, und die obere Grenze kann fixiert oder erweitert werden, wenn neue Elemente hinzugefügt werden.

Für Arrays mit einer kleinen Anzahl von Elementen kann die ATL-Klasse CSimpleArray verwendet werden.

CAtlArray ist eng mit der Klasse von CArray MFC verbunden und wird in einem MFC-Projekt arbeiten, wenn auch ohne Serialisierungsunterstützung.

Weitere Informationen finden Sie unter ATL-Auflistungsklassen.

Anforderungen

Kopfzeile: atlcoll.h

CAtlArray::Add

Rufen Sie diese Methode auf, um dem Arrayobjekt ein Element hinzuzufügen.

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

Parameter

Element
Das Element, das dem Array hinzugefügt werden soll.

Rückgabewert

Gibt den Index des hinzugefügten Elements zurück.

Hinweise

Das neue Element wird am Ende des Arrays hinzugefügt. Wenn kein Element angegeben wird, wird ein leeres Element hinzugefügt. d. h., das Array wird vergrößert, als ob ein echtes Element hinzugefügt wurde. Wenn der Vorgang fehlschlägt, wird AtlThrow mit dem Argument E_OUTOFMEMORY aufgerufen.

Beispiel

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

Rufen Sie diese Methode auf, um den Inhalt eines Arrays am Ende eines anderen hinzuzufügen.

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

Parameter

aSrc
Das anzufügende Array.

Rückgabewert

Gibt den Index des ersten angefügten Elements zurück.

Hinweise

Die Elemente im angegebenen Array werden am Ende des vorhandenen Arrays hinzugefügt. Bei Bedarf wird Speicher zugewiesen, um die neuen Elemente aufzunehmen.

Die Arrays müssen denselben Typ aufweisen, und es ist nicht möglich, ein Array an sich selbst anzufügen.

In Debugbuilds wird ein ATLASSERT ausgelöst, wenn das CAtlArray Argument kein gültiges Array ist oder aSrc auf dasselbe Objekt verweist. In Releasebuilds können ungültige Argumente zu unvorhersehbaren Verhaltensweisen führen.

Beispiel

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

Rufen Sie diese Methode auf, um zu bestätigen, dass das Arrayobjekt gültig ist.

void AssertValid() const;

Hinweise

Wenn das Arrayobjekt ungültig ist, löst ATLASSERT eine Assertion aus. Diese Methode ist nur verfügbar, wenn _DEBUG definiert ist.

Beispiel

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

CAtlArray::CAtlArray

Der Konstruktor.

CAtlArray() throw();

Hinweise

Initialisiert das Arrayobjekt.

Beispiel

CAtlArray<int> iArray;   

CAtlArray::~CAtlArray

Der Destruktor.

~CAtlArray() throw();

Hinweise

Gibt alle vom Arrayobjekt verwendeten Ressourcen frei.

CAtlArray::Copy

Rufen Sie diese Methode auf, um die Elemente eines Arrays in ein anderes zu kopieren.

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

Parameter

aSrc
Die Quelle der Elemente, die in ein Array kopiert werden sollen.

Hinweise

Rufen Sie diese Methode auf, um Elemente eines Arrays mit den Elementen eines anderen Arrays zu überschreiben. Bei Bedarf wird Speicher zugewiesen, um die neuen Elemente aufzunehmen. Es ist nicht möglich, Elemente eines Arrays auf sich selbst zu kopieren.

Wenn der vorhandene Inhalt des Arrays beibehalten werden soll, verwenden Sie stattdessen "CAtlArray::Append" .

In Debugbuilds wird ein ATLASSERT ausgelöst, wenn das vorhandene CAtlArray Objekt ungültig ist oder aSrc auf dasselbe Objekt verweist. In Releasebuilds können ungültige Argumente zu unvorhersehbaren Verhaltensweisen führen.

Hinweis

CAtlArray::Copy unterstützt keine Arrays, die aus Elementen bestehen, die mit der CAutoPtr-Klasse erstellt wurden.

Beispiel

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

Rufen Sie diese Methode auf, um alle leeren Elemente aus dem Array zu entfernen.

void FreeExtra() throw();

Hinweise

Alle leeren Elemente werden entfernt, aber die Größe und obere Grenze des Arrays bleiben unverändert.

In Debugbuilds wird ein ATLASSERT ausgelöst, wenn das CAtlArray-Objekt ungültig ist oder wenn das Array seine maximale Größe überschreitet.

CAtlArray::GetAt

Rufen Sie diese Methode auf, um ein einzelnes Element aus dem Arrayobjekt abzurufen.

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

Parameter

iElement
Der Indexwert des zurückzugebenden Arrayelements.

Rückgabewert

Gibt einen Verweis auf das erforderliche Arrayelement zurück.

Hinweise

In Debugbuilds wird ein ATLASSERT ausgelöst, wenn iElement die Anzahl der Elemente im Array überschreitet. In Releasebuilds kann ein ungültiges Argument zu unvorhersehbaren Verhaltensweisen führen.

Beispiel

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

Rufen Sie diese Methode auf, um die Anzahl der im Array gespeicherten Elemente zurückzugeben.

size_t GetCount() const throw();

Rückgabewert

Gibt die Anzahl der im Array gespeicherten Elemente zurück.

Hinweise

Wenn das erste Element im Array an Position 0 liegt, ist der von GetCount diesem zurückgegebene Wert immer 1 größer als der größte Index.

Beispiel

Sehen Sie sich das Beispiel für CAtlArray::GetAt an.

CAtlArray::GetData

Rufen Sie diese Methode auf, um einen Zeiger auf das erste Element im Array zurückzugeben.

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

Rückgabewert

Gibt einen Zeiger auf den Speicherspeicherort zurück, der das erste Element im Array speichert. Wenn keine Elemente verfügbar sind, wird NULL zurückgegeben.

Beispiel

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

Der Datentyp, der zum Hinzufügen von Elementen zum Array verwendet werden soll.

typedef ETraits::INARGTYPE INARGTYPE;

CAtlArray::InsertArrayAt

Rufen Sie diese Methode auf, um ein Array in ein anderes einzufügen.

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

Parameter

iStart
Der Index, an dem das Array eingefügt werden soll.

paNew
Das einzufügende Array.

Hinweise

Elemente aus dem Array paNew werden in das Arrayobjekt kopiert, beginnend bei Element iStart. Die vorhandenen Arrayelemente werden verschoben, um zu vermeiden, dass sie überschrieben werden.

In Debugbuilds wird ein ATLASSERT ausgelöst, wenn das CAtlArray Objekt ungültig ist oder der paNew-Zeiger NULL oder ungültig ist.

Hinweis

CAtlArray::InsertArrayAt unterstützt keine Arrays, die aus Elementen bestehen, die mit der CAutoPtr-Klasse erstellt wurden.

Beispiel

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

Rufen Sie diese Methode auf, um ein neues Element (oder mehrere Kopien eines Elements) in das Arrayobjekt einzufügen.

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

Parameter

iElement
Der Index, in den das Element oder die Elemente eingefügt werden sollen.

Element
Der Wert des einzufügenden Elements oder elements.

nCount
Die Anzahl der hinzuzufügenden Elemente.

Hinweise

Fügt ein oder mehrere Elemente in das Array ein, beginnend bei index iElement. Vorhandene Elemente werden verschoben, um zu vermeiden, dass sie überschrieben werden.

In Debugbuilds wird ein ATLASSERT ausgelöst, wenn das CAtlArray Objekt ungültig ist, die Anzahl der hinzuzufügenden Elemente null ist oder die kombinierte Anzahl von Elementen zu groß ist, damit das Array enthalten kann. In Einzelhandelsbuilds kann das Übergeben ungültiger Parameter zu unvorhersehbaren Ergebnissen führen.

Beispiel

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

Rufen Sie diese Methode auf, um zu testen, ob das Array leer ist.

bool IsEmpty() const throw();

Rückgabewert

Gibt true zurück, wenn das Array leer ist, andernfalls "false".

Hinweise

Das Array soll leer sein, wenn es keine Elemente enthält. Selbst wenn das Array leere Elemente enthält, ist es daher nicht leer.

Beispiel

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

Rufen Sie diesen Operator auf, um einen Verweis auf ein Element im Array zurückzugeben.

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

Parameter

iElement
Der Indexwert des zurückzugebenden Arrayelements.

Rückgabewert

Gibt einen Verweis auf das erforderliche Arrayelement zurück.

Hinweise

Führt eine ähnliche Funktion wie CAtlArray::GetAt aus. Im Gegensatz zur MFC-Klasse CArray kann dieser Operator nicht als Ersatz für CAtlArray::SetAt verwendet werden.

Bei Debugbuilds wird ein ATLASSERT ausgelöst, wenn iElement die Gesamtanzahl der Elemente im Array überschreitet. In Einzelhandelsbuilds kann ein ungültiger Parameter zu unvorhersehbaren Ergebnissen führen.

CAtlArray::OUTARGTYPE

Der Datentyp, der zum Abrufen von Elementen aus dem Array verwendet werden soll.

typedef ETraits::OUTARGTYPE OUTARGTYPE;

CAtlArray::RemoveAll

Rufen Sie diese Methode auf, um alle Elemente aus dem Arrayobjekt zu entfernen.

void RemoveAll() throw();

Hinweise

Entfernt alle Elemente aus dem Arrayobjekt.

Diese Methode ruft CAtlArray::SetCount auf, um die Größe des Arrays zu ändern und anschließend alle zugeordneten Speicher freizugeben.

Beispiel

Sehen Sie sich das Beispiel für CAtlArray::IsEmpty an.

CAtlArray::RemoveAt

Rufen Sie diese Methode auf, um ein oder mehrere Elemente aus dem Array zu entfernen.

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

Parameter

iElement
Der Index des ersten zu entfernenden Elements.

nCount
Die Anzahl der zu entfernenden Elemente.

Hinweise

Entfernt ein oder mehrere Elemente aus dem Array. Alle verbleibenden Elemente werden nach unten verschoben. Die obere Grenze wird erhöht, der Arbeitsspeicher wird jedoch erst freigegeben, wenn ein Aufruf von CAtlArray::FreeExtra erfolgt.

In Debugbuilds wird ein ATLASSERT ausgelöst, wenn das CAtlArray Objekt ungültig ist oder wenn die kombinierte Summe von iElement und nCount die Gesamtanzahl der Elemente im Array überschreitet. In Einzelhandelsbuilds können ungültige Parameter zu unvorhersehbaren Ergebnissen führen.

Beispiel

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

Rufen Sie diese Methode auf, um den Wert eines Elements im Arrayobjekt festzulegen.

void SetAt(size_t iElement, INARGTYPE element);

Parameter

iElement
Der Index, der auf das festzulegende Arrayelement zeigt.

Element
Der neue Wert des angegebenen Elements.

Hinweise

In Debugbuilds wird ein ATLASSERT ausgelöst, wenn iElement die Anzahl der Elemente im Array überschreitet. In Einzelhandelsbuilds kann ein ungültiger Parameter zu unvorhersehbaren Ergebnissen führen.

Beispiel

Sehen Sie sich das Beispiel für CAtlArray::GetAt an.

CAtlArray::SetCount

Rufen Sie diese Methode auf, um die Größe des Arrayobjekts festzulegen.

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

Parameter

nNewSize
Die erforderliche Größe des Arrays.

nGrowBy
Ein Wert, der verwendet wird, um zu bestimmen, wie groß der Puffer wird. Ein Wert von -1 bewirkt, dass ein intern berechneter Wert verwendet wird.

Rückgabewert

Gibt true zurück, wenn die Größe des Arrays erfolgreich geändert wurde, andernfalls "false".

Hinweise

Das Array kann vergrößert oder verkleinert werden. Wenn dies erhöht wird, werden dem Array zusätzliche leere Elemente hinzugefügt. Wenn die Elemente verringert werden, werden die Elemente mit den größten Indizes gelöscht und der Speicher freigegeben.

Verwenden Sie diese Methode, um die Größe des Arrays festzulegen, bevor Sie es verwenden. Wenn SetCount dies nicht der Fall ist, verringert sich der Prozess des Hinzufügens von Elementen – und der nachfolgenden ausgeführten Speicherzuweisung – zur Leistungs- und Fragmentspeicherung.

Beispiel

Sehen Sie sich das Beispiel für CAtlArray::GetData an.

CAtlArray::SetAtGrow

Rufen Sie diese Methode auf, um den Wert eines Elements im Arrayobjekt festzulegen und das Array nach Bedarf zu erweitern.

void SetAtGrow(size_t iElement, INARGTYPE element);

Parameter

iElement
Der Index, der auf das festzulegende Arrayelement zeigt.

Element
Der neue Wert des angegebenen Elements.

Hinweise

Ersetzt den Wert des Elements, auf das durch den Index verwiesen wird. Wenn iElement größer als die aktuelle Größe des Arrays ist, wird das Array automatisch mithilfe eines Aufrufs von CAtlArray::SetCount erhöht. In Debugbuilds wird ein ATLASSERT ausgelöst, wenn das CAtlArray Objekt ungültig ist. In Einzelhandelsbuilds können ungültige Parameter zu unvorhersehbaren Ergebnissen führen.

Beispiel

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

Siehe auch

MMXSwarm-Beispiel
DynamicConsumer-Beispiel
UpdatePV-Beispiel
Beispiel für Festrahmen
CArray-Klasse
Klassenübersicht