Partager via


CAtlArray, classe

Cette classe implémente un objet de tableau.

Syntaxe

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

Paramètres

E
Type de données à stocker dans le tableau.

ETraits
Code utilisé pour copier ou déplacer des éléments.

Membres

Méthodes

Fonction Description
Ajouter Appelez cette méthode pour ajouter un élément à l’objet tableau.
Append Appelez cette méthode pour ajouter le contenu d’un tableau à la fin d’une autre.
AssertValid Appelez cette méthode pour vérifier que l’objet tableau est valide.
CAtlArray Constructeur .
~CAtlArray Destructeur.
Copy Appelez cette méthode pour copier les éléments d’un tableau vers un autre.
FreeExtra Appelez cette méthode pour supprimer les éléments vides du tableau.
GetAt Appelez cette méthode pour récupérer un élément unique à partir de l’objet tableau.
GetCount Appelez cette méthode pour retourner le nombre d’éléments stockés dans le tableau.
GetData Appelez cette méthode pour retourner un pointeur vers le premier élément du tableau.
InsertArrayAt Appelez cette méthode pour insérer un tableau dans un autre.
InsertAt Appelez cette méthode pour insérer un nouvel élément (ou plusieurs copies d’un élément) dans l’objet tableau.
IsEmpty Appelez cette méthode pour tester si le tableau est vide.
RemoveAll Appelez cette méthode pour supprimer tous les éléments de l’objet tableau.
RemoveAt Appelez cette méthode pour supprimer un ou plusieurs éléments du tableau.
SetAt Appelez cette méthode pour définir la valeur d’un élément dans l’objet tableau.
SetAtGrow Appelez cette méthode pour définir la valeur d’un élément dans l’objet tableau, en développant le tableau en fonction des besoins.
SetCount Appelez cette méthode pour définir la taille de l’objet tableau.

Opérateurs

Opérateur Description
operator [] Appelez cet opérateur pour renvoyer une référence à un élément du tableau.

Typedefs

Typedef Description
INARGTYPE Type de données à utiliser pour ajouter des éléments au tableau.
OUTARGTYPE Type de données à utiliser pour récupérer des éléments du tableau.

Notes

CAtlArray fournit des méthodes pour créer et gérer un tableau d’éléments d’un type défini par l’utilisateur. Bien que similaire aux tableaux C standard, l’objet CAtlArray peut réduire et croître dynamiquement si nécessaire. L’index de tableau commence toujours à la position 0, et la limite supérieure peut être fixe ou autorisée à se développer à mesure que de nouveaux éléments sont ajoutés.

Pour les tableaux avec un petit nombre d’éléments, la classe ATL CSimpleArray peut être utilisée.

CAtlArray est étroitement lié à la classe de CArray MFC et fonctionnera dans un projet MFC, bien que sans prise en charge de la sérialisation.

Pour plus d’informations, consultez les classes de collection ATL.

Spécifications

En-tête : atlcoll.h

CAtlArray ::Add

Appelez cette méthode pour ajouter un élément à l’objet tableau.

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

Paramètres

élément
Élément à ajouter au tableau.

Valeur de retour

Retourne l’index de l’élément ajouté.

Notes

Le nouvel élément est ajouté à la fin du tableau. Si aucun élément n’est fourni, un élément vide est ajouté ; autrement dit, le tableau est augmenté de taille comme si un élément réel a été ajouté. Si l’opération échoue, AtlThrow est appelé avec l’argument E_OUTOFMEMORY.

Exemple

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

Appelez cette méthode pour ajouter le contenu d’un tableau à la fin d’une autre.

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

Paramètres

aSrc
Tableau à ajouter.

Valeur de retour

Retourne l’index du premier élément ajouté.

Notes

Les éléments du tableau fourni sont ajoutés à la fin du tableau existant. Si nécessaire, la mémoire sera allouée pour prendre en charge les nouveaux éléments.

Les tableaux doivent être du même type et il n’est pas possible d’ajouter un tableau lui-même.

Dans les builds de débogage, un ATLASSERT est déclenché si l’argument CAtlArray n’est pas un tableau valide ou si aSrc fait référence au même objet. Dans les builds de mise en production, les arguments non valides peuvent entraîner un comportement imprévisible.

Exemple

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

Appelez cette méthode pour vérifier que l’objet tableau est valide.

void AssertValid() const;

Notes

Si l’objet tableau n’est pas valide, ATLASSERT lève une assertion. Cette méthode est disponible uniquement si _DEBUG est définie.

Exemple

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

CAtlArray ::CAtlArray

Constructeur .

CAtlArray() throw();

Notes

Initialise l’objet tableau.

Exemple

CAtlArray<int> iArray;   

CAtlArray ::~CAtlArray

Destructeur.

~CAtlArray() throw();

Notes

Libère toutes les ressources utilisées par l’objet tableau.

CAtlArray ::Copy

Appelez cette méthode pour copier les éléments d’un tableau vers un autre.

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

Paramètres

aSrc
Source des éléments à copier dans un tableau.

Notes

Appelez cette méthode pour remplacer les éléments d’un tableau avec les éléments d’un autre tableau. Si nécessaire, la mémoire sera allouée pour prendre en charge les nouveaux éléments. Il n’est pas possible de copier des éléments d’un tableau lui-même.

Si le contenu existant du tableau doit être conservé, utilisez CAtlArray ::Append à la place.

Dans les builds de débogage, un ATLASSERT est déclenché si l’objet existant CAtlArray n’est pas valide ou si aSrc fait référence au même objet. Dans les builds de mise en production, les arguments non valides peuvent entraîner un comportement imprévisible.

Remarque

CAtlArray::Copy ne prend pas en charge les tableaux composés d’éléments créés avec la classe CAutoPtr .

Exemple

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

Appelez cette méthode pour supprimer les éléments vides du tableau.

void FreeExtra() throw();

Notes

Tous les éléments vides sont supprimés, mais la taille et la limite supérieure du tableau restent inchangées.

Dans les builds de débogage, un ATLASSERT est déclenché si l’objet CAtlArray n’est pas valide ou si le tableau dépasse sa taille maximale.

CAtlArray ::GetAt

Appelez cette méthode pour récupérer un élément unique à partir de l’objet tableau.

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

Paramètres

iElement
Valeur d’index de l’élément de tableau à retourner.

Valeur de retour

Retourne une référence à l’élément de tableau requis.

Notes

Dans les builds de débogage, un ATLASSERT est déclenché si iElement dépasse le nombre d’éléments dans le tableau. Dans les builds de mise en production, un argument non valide peut entraîner un comportement imprévisible.

Exemple

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

Appelez cette méthode pour retourner le nombre d’éléments stockés dans le tableau.

size_t GetCount() const throw();

Valeur de retour

Retourne le nombre d’éléments stockés dans le tableau.

Notes

Comme le premier élément du tableau est à la position 0, la valeur retournée par GetCount est toujours supérieure à 1 index le plus grand.

Exemple

Consultez l’exemple de CAtlArray ::GetAt.

CAtlArray ::GetData

Appelez cette méthode pour retourner un pointeur vers le premier élément du tableau.

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

Valeur de retour

Retourne un pointeur vers l’emplacement de mémoire stockant le premier élément du tableau. Si aucun élément n’est disponible, NULL est retourné.

Exemple

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

Type de données à utiliser pour ajouter des éléments au tableau.

typedef ETraits::INARGTYPE INARGTYPE;

CAtlArray ::InsertArrayAt

Appelez cette méthode pour insérer un tableau dans un autre.

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

Paramètres

iStart
Index auquel le tableau doit être inséré.

paNew
Tableau à insérer.

Notes

Les éléments du tableau paNew sont copiés dans l’objet de tableau, en commençant par l’élément iStart. Les éléments de tableau existants sont déplacés pour éviter d’être remplacés.

Dans les builds de débogage, un ATLASSERT est déclenché si l’objet CAtlArray n’est pas valide, ou si le pointeur paNew est NULL ou non valide.

Remarque

CAtlArray::InsertArrayAt ne prend pas en charge les tableaux composés d’éléments créés avec la classe CAutoPtr .

Exemple

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

Appelez cette méthode pour insérer un nouvel élément (ou plusieurs copies d’un élément) dans l’objet tableau.

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

Paramètres

iElement
Index dans lequel l’élément ou les éléments doivent être insérés.

élément
Valeur de l’élément ou des éléments à insérer.

nCount
Nombre d’éléments à ajouter.

Notes

Insère un ou plusieurs éléments dans le tableau, en commençant à l’index iElement. Les éléments existants sont déplacés pour éviter d’être remplacés.

Dans les builds de débogage, un ATLASSERT est déclenché si l’objet CAtlArray n’est pas valide, le nombre d’éléments à ajouter est égal à zéro, ou le nombre combiné d’éléments est trop grand pour que le tableau contienne. Dans les builds de vente au détail, la transmission de paramètres non valides peut entraîner des résultats imprévisibles.

Exemple

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

Appelez cette méthode pour tester si le tableau est vide.

bool IsEmpty() const throw();

Valeur de retour

Retourne true si le tableau est vide, false sinon.

Notes

Le tableau est dit vide s’il ne contient aucun élément. Par conséquent, même si le tableau contient des éléments vides, il n’est pas vide.

Exemple

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

Appelez cet opérateur pour renvoyer une référence à un élément du tableau.

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

Paramètres

iElement
Valeur d’index de l’élément de tableau à retourner.

Valeur de retour

Retourne une référence à l’élément de tableau requis.

Notes

Exécute une fonction similaire à CAtlArray ::GetAt. Contrairement à la classe MFC CArray, cet opérateur ne peut pas être utilisé comme substitut de CAtlArray ::SetAt.

Dans les builds de débogage, un ATLASSERT est déclenché si iElement dépasse le nombre total d’éléments dans le tableau. Dans les builds de vente au détail, un paramètre non valide peut entraîner des résultats imprévisibles.

CAtlArray ::OUTARGTYPE

Type de données à utiliser pour récupérer des éléments du tableau.

typedef ETraits::OUTARGTYPE OUTARGTYPE;

CAtlArray ::RemoveAll

Appelez cette méthode pour supprimer tous les éléments de l’objet tableau.

void RemoveAll() throw();

Notes

Supprime tous les éléments de l’objet tableau.

Cette méthode appelle CAtlArray ::SetCount pour redimensionner le tableau et libère par la suite toute mémoire allouée.

Exemple

Consultez l’exemple de CAtlArray ::IsEmpty.

CAtlArray ::RemoveAt

Appelez cette méthode pour supprimer un ou plusieurs éléments du tableau.

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

Paramètres

iElement
Index du premier élément à supprimer.

nCount
Nombre d'éléments à supprimer.

Notes

Supprime un ou plusieurs éléments du tableau. Tous les éléments restants sont décalés vers le bas. La limite supérieure est décrémentée, mais la mémoire n’est pas libérée tant qu’un appel à CAtlArray ::FreeExtra n’est pas effectué.

Dans les builds de débogage, un ATLASSERT est déclenché si l’objet CAtlArray n’est pas valide ou si le total combiné d’iElement et nCount dépasse le nombre total d’éléments dans le tableau. Dans les builds de vente au détail, les paramètres non valides peuvent entraîner des résultats imprévisibles.

Exemple

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

Appelez cette méthode pour définir la valeur d’un élément dans l’objet tableau.

void SetAt(size_t iElement, INARGTYPE element);

Paramètres

iElement
Index pointant vers l’élément de tableau à définir.

élément
Nouvelle valeur de l’élément spécifié.

Notes

Dans les builds de débogage, un ATLASSERT est déclenché si iElement dépasse le nombre d’éléments dans le tableau. Dans les builds de vente au détail, un paramètre non valide peut entraîner des résultats imprévisibles.

Exemple

Consultez l’exemple de CAtlArray ::GetAt.

CAtlArray ::SetCount

Appelez cette méthode pour définir la taille de l’objet tableau.

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

Paramètres

nNewSize
Taille requise du tableau.

nGrowBy
Valeur utilisée pour déterminer la taille de la mémoire tampon. La valeur -1 entraîne l’utilisation d’une valeur calculée en interne.

Valeur de retour

Retourne true si le tableau est correctement redimensionné, false dans le cas contraire.

Notes

Le tableau peut être augmenté ou diminué en taille. En cas d’augmentation, des éléments vides supplémentaires sont ajoutés au tableau. En cas de diminution, les éléments avec les plus grands index sont supprimés et libérés en mémoire.

Utilisez cette méthode pour définir la taille du tableau avant de l’utiliser. Si SetCount ce n’est pas le cas, le processus d’ajout d’éléments ( et l’allocation de mémoire suivante effectuée) réduit les performances et la mémoire fragment.

Exemple

Consultez l’exemple de CAtlArray ::GetData.

CAtlArray ::SetAtGrow

Appelez cette méthode pour définir la valeur d’un élément dans l’objet tableau, en développant le tableau en fonction des besoins.

void SetAtGrow(size_t iElement, INARGTYPE element);

Paramètres

iElement
Index pointant vers l’élément de tableau à définir.

élément
Nouvelle valeur de l’élément spécifié.

Notes

Remplace la valeur de l’élément pointé par l’index. Si iElement est supérieur à la taille actuelle du tableau, le tableau est automatiquement augmenté à l’aide d’un appel à CAtlArray ::SetCount. Dans les builds de débogage, un ATLASSERT est déclenché si l’objet CAtlArray n’est pas valide. Dans les builds de vente au détail, les paramètres non valides peuvent entraîner des résultats imprévisibles.

Exemple

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

Voir aussi

Exemple MMXSwarm
Exemple DynamicConsumer
Exemple UpdatePV
Exemple de marque
CArray, classe
Vue d’ensemble de la classe