Les tableaux en C++ - Déclaration et interêts

13 Aug 2021 15 Aug 2021 9892 vues ESSADDOUKI Mostafa 3 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

Un tableau est une variable qui représente une séquence d'emplacements mémoire contigus, chacun stockant un élément du même type. Il est idéal pour stocker et manipuler des collections de données homogènes.

Tableau

Un tableau de taille n stocke n éléments du même type. Les indices vont de 0 à n-1. L'élément à l'indice i se note tab[i], équivalent en notation pointeur à *(tab + i).

Déclaration et initialisation

   
Syntaxe C++
type nomTableau[taille];              // déclaration seule
type nomTableau[taille] {v1, v2, …}; // déclaration + initialisation
type nomTableau[] {v1, v2, v3};      // taille déduite automatiquement
double notes[20];              // Exemple 1 : tableau de 20 doubles
int notes[6] {10.5, 9.0, 17.5, 18.75, 4.5, 8.75}; // Exemple 3
int valeurs[] {2, 3, 4};       // Exemple 5 : taille = 3 (déduite)
notes[3] = 17.5;               // Exemple 2 : accès en écriture
notes[3] = notes[2];           // Exemple 4 : copie d'élément
Omettre la taille

Omettre la taille lors de l'initialisation est recommandé : le compilateur la calcule automatiquement et vous ne risquez pas de vous tromper.

Tableaux multidimensionnels

int Tab[2][2] = { {0, 1}, {2, 3} }; // Exemple 7 : tableau 2D
Tab[0][0] = 0;
Tab[0][1] = 1;

int Tab[2][2] = { 0, 1, 2, 3 };     // Exemple 8 : écriture alternative

Tableaux dynamiques

Les tableaux statiques ont une taille fixée à la compilation. Pour une taille déterminée à l'exécution, on utilise new pour allouer en mémoire dynamique (tas).

int* Tab = new int[3];   // Exemple 9 : allocation dynamique
*(Tab+1) = 10;           // Exemple 10 : équivalent à Tab[1] = 10
Libérer la mémoire

Tout tableau alloué dynamiquement avec new[] doit être libéré avec delete[]. Oublier cette étape provoque une fuite mémoire.

delete[] Tab;     // libérer le tableau
Tab = nullptr;    // éviter un pointeur danglant

Taille du tableau

Pour un tableau statique, utilisez std::size() (C++17). Pour un tableau dynamique, il faut conserver la taille dans une variable séparée.

// Exemple 12 : taille d'un tableau statique
int Tab[3] = {1, 2, 6};
int taille = std::size(Tab);
cout << "Nombre d'éléments : " << taille << '\n';
Sortie
Nombre d'éléments : 3
Dépassement de bornes

C++ ne vérifie pas les accès hors bornes. Écrire Tab[2] = 3 sur un tableau de taille 2 provoque un comportement indéfini (corruption mémoire, crash).

Pointeurs et tableaux

Un nom de tableau se comporte comme un pointeur constant vers son premier élément. On peut donc utiliser l'arithmétique des pointeurs pour parcourir le tableau.

Notation tableauNotation pointeurSignification
tab[0]*tabPremier élément
tab[1]*(tab + 1)Deuxième élément
tab[i]*(tab + i)Élément d'indice i
Arithmétique des pointeurs

Incrémenter un pointeur de 1 l'avance de sizeof(type) octets en mémoire. Ainsi, ptr + 1 pointe sur l'élément suivant, quel que soit le type du tableau.

  Exemple n°19 — Saisie et affichage par notation pointeur

#include <iostream>
using namespace std;

int main() {
    double notes[3];
    for (int i = 0; i < std::size(notes); ++i) {
        cout << "Saisir une note : ";
        cin >> *(notes + i);
    }
    for (int i = 0; i < std::size(notes); ++i) {
        cout << *(notes + i) << '\t';
    }
    return 0;
}

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.