La classe array en C++ (bibliothèque STL) <array>

09 Feb 2022 09 Feb 2022 2949 vues ESSADDOUKI Mostafa 5 min de lecture
Introduction et syntaxe de base
1 Introduction au langage C++ 2 Entrée-sortie en C++ - cin et cout 3 Inférence de type avec le mot-clé auto en C++ 4 Classe std::string et les chaînes de caractères en C++ 5 Les structures conditionnelles (if et switch) en C++ (C++17 et C++20) 6 Les boucles en C++ (C++17 et C++20) 7 La gestion des fichiers en C++
Pointeurs et fonctions
8 Introduction aux pointeurs en C++ - Déclaration et interêts 9 Les références en C++ - déclaration et interêts 10 Les tableaux en C++ - Déclaration et interêts 11 Introduction aux fonctions en C++ 12 Passer des arguments à une fonction en C++ 13 Déclarer un paramètre const en C++ 14 Les fonctions Lambda en C++ 15 Fonctions utiles (Mathématiques et caractères) en C++
Programmation OO
16 Classes et objets en C++ 17 Spécificateurs d'accès en C++ 18 Constructeurs et destructeur d'une classe en C++ 19 Fonctions membres en C++ 20 Membres statiques d'une classe en C++ 21 Fonctions en ligne en C++ - inline 22 Fonctions et classes amies en C++ - friend 23 Surcharge des fonctions en C++ 24 Surcharge des opérateurs en C++ 25 Héritage en C++ 26 La gestion d'exceptions en C++ : déclaration, utilisation et personnalisation 27 fonctions et classes templates en C++ 28 Les nouveautés C++20 pour améliorer les templates en C++
Structures de données
29 Introduction aux structures de données 30 Les structures en C++ et la différence avec les structures en C 31 Les listes chaînées en C++ 32 Les piles en C++ 33 File d'attente en C++ 34 Arbre binaire de recherche : définition et mise en oeuvre en C++
La bibliothèque standard (STL)
35 Introduction à la bibliothèque de Template Standard STL 36 Les itérateurs en C++ - définition, déclaration et exemples 37 La classe array en C++ (bibliothèque STL) <array> 38 La classe vector de la bibliothèque STL <vector> 39 La classe deque en C++ ( Bibliothèque STL) 40 La classe list en C++ (bibliothèque STL) <list> 41 La classe stack (Pile) en C++ (bibliothèque STL) <stack> 42 La classe queue (File d'attente) en C++ (bibliothèque STL) <queue> 43 La file d'attente prioritaire (classe priority_queue) - Bibliothèque STL 44 Les ensembles en C++ (Classe set <set> - Bibliothèque STL) 45 Les dictionnaires en C++ : Classe map (Bibliothèque STL) 46 Introduction aux algorithmes de la bibliothèque STL (programmation compétitive) 47 Tri et méthodes associées en C++ - Bibliothèque STL 48 Recherche dichotomique et méthodes associées en C++ - Bibliothèque STL 49 Appliquer un prédicat ou une fonction aux éléments d'une séquence en C++ - Bibliothèque STL 50 Recherche dans une séquence et méthodes associées en C++ - Bibliothèque STL

La classe array, définie dans l'en-tête <array>, est une collection d'éléments du même type stockés dans des emplacements de mémoire contigus. C'est un conteneur de séquence à taille fixe : le nombre d'éléments est déterminé à la compilation et ne peut pas changer à l'exécution.

Quand utiliser array ? En pratique, array est peu utilisé car la plupart des scénarios réels nécessitent des conteneurs dynamiques (vector, deque…). Il reste utile lorsque la taille est connue et invariante, et que l'on souhaite les avantages des méthodes STL sur un tableau C classique.

Syntaxe et construction

   
Déclaration C++
array<type_objets, taille> nomTab;                       // Tableau vide (valeurs indéfinies)
array<type_objets, n>     nomTab = {val1, val2, ..., valn}; // Tableau initialisé

Fonctions membres

Accès aux éléments

   
Accès C++
nomTab.at(i);    // Élément à l'indice i — lève out_of_range si i hors bornes
nomTab[i];       // Élément à l'indice i — sans vérification des bornes
nomTab.front();  // Premier élément
nomTab.back();   // Dernier élément
at() vs [] Préférer at() en développement : il lève une exception std::out_of_range si l'indice dépasse la taille du tableau, contrairement à [] qui produit un comportement indéfini.

Remplissage et échange

   
fill() et swap() C++
nomTab.fill(valeur);     // Assigne valeur à tous les éléments
nomTab.swap(autreTab);   // Échange le contenu avec autreTab (même type et taille)
Contrainte de swap() Les deux tableaux échangés doivent avoir le même type et la même taille. Si l'échange d'un élément lève une exception, swap() la propage.

Taille

   
Taille C++
nomTab.size();      // Taille du tableau (= taille maximale pour array)
nomTab.max_size();  // Identique à size() pour un conteneur statique
nomTab.empty();     // true si taille == 0

Itérateurs

   
begin() et end() C++
nomTab.begin();   // Itérateur vers le premier élément
nomTab.end();     // Itérateur vers la position après le dernier élément
FonctionDescriptionVérification bornes
at(i)Accès par indiceOui — lève out_of_range
operator[]Accès par indiceNon
front()Premier élémentNon
back()Dernier élémentNon
fill(v)Remplir tout le tableau avec v
swap(t)Échanger avec un autre tableauMême type et taille requis
size()Nombre d'éléments
empty()Teste si vide
begin() / end()Itérateurs de début / fin

Exemple complet

#include <iostream>
#include <array>
using namespace std;

int main() {
    array<int, 5> tab  = {1, 5, 8, 9, 10};
    array<int, 8> tab2;
    array<int, 5> tab3 = {20, 30, 50, 40, 60};

    // Affichage avec at()
    cout << "Contenu de tab : \n";
    for (int i = 0; i < tab.size(); i++)
        cout << tab.at(i) << "  ";
    cout << "\n";

    cout << "Taille : "         << tab.size()     << "\n";
    cout << "Taille max : "     << tab.max_size()  << "\n";
    cout << "Premier : "        << tab.front()     << "\n";
    cout << "Dernier : "        << tab.back()      << "\n\n";

    // fill()
    tab2.fill(7);
    cout << "tab2 après fill(7) : \n";
    for (int i = 0; i < tab2.size(); i++)
        cout << tab2[i] << "  ";
    cout << "\n\n";

    // swap()
    tab.swap(tab3);
    cout << "tab après swap avec tab3 : \n";
    for (int i = 0; i < tab.size(); i++)
        cout << tab.at(i) << "  ";
    cout << "\n";
    cout << "tab3 après swap : \n";
    for (int i = 0; i < tab3.size(); i++)
        cout << tab3.at(i) << "  ";
    cout << "\n\n";

    // Parcours avec itérateur
    cout << "tab via itérateur : \n";
    array<int, 5>::iterator it = tab.begin();
    while (it < tab.end()) {
        cout << *it << "  ";
        it = next(it);
    }
    cout << "\n";

    return 0;
}
Sortie
Contenu de tab :
1  5  8  9  10
Taille : 5
Taille max : 5
Premier : 1
Dernier : 10

tab2 après fill(7) :
7  7  7  7  7  7  7  7

tab après swap avec tab3 :
20  30  50  40  60
tab3 après swap :
1  5  8  9  10

tab via itérateur :
20  30  50  40  60

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.