Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Langage C++
  3. Tableaux statiques, introduction conteneurs
Extrait - Langage C++ De l'héritage C au C++ moderne (avec programmes d'illustration) (2e édition)
Extraits du livre
Langage C++ De l'héritage C au C++ moderne (avec programmes d'illustration) (2e édition) Revenir à la page d'achat du livre

Tableaux statiques, introduction conteneurs

Hérité du C

1. Principe du tableau

Un tableau est un ensemble d’objets de même type : un tableau de int, de float de double, de structures de même type, etc.

Le fait qu’il soit statique signifie qu’il est non dynamique, c’est-à-dire que sa taille est fixe et que son espace mémoire est alloué par la machine à la déclaration.

Chaque élément du tableau est numéroté du premier, 0, au dernier qui est le nombre d’éléments dans le tableau moins un. Le numéro d’un élément est appelé son indice. L’indice associé à l’opérateur crochets [ ] va permettre d’accéder à l’élément correspondant.

Par exemple, avoir dans un programme un tableau de 10 entiers, c’est avoir un regroupement de 10 entiers en une seule variable de type tableau de int. Les indices des éléments vont de 0 pour le premier à 9 pour le dernier. Chaque int du tableau a sa propre valeur. Nous pouvons le représenter de la façon suivante :

images/chap1-im3b.png

L’entier d’indice 4 vaut 12, l’entier d’indice 1 vaut 32, l’entier d’indice 8 vaut 123, l’entier d’indice 9 vaut 9, etc.

2. Disposer d’un tableau

a. Définir et déclarer un tableau

Pour définir et déclarer un tableau dans un programme, il faut donner le type des éléments, le nom du tableau, le nombre des éléments entre crochets, et clore avec un point-virgule. Soit le formalisme :

<type> <nom> <[ constante entière] > < ; > 

Par exemple :

int tab [10];         // déclaration d'un tableau de 10 int  
float f[90]           //...

Apports du C++

1. Boucle for (:) "pour chaque"

La boucle for classique s’utilise très souvent pour parcourir des tableaux et des conteneurs C++ (les principaux conteneurs sont brièvement présentés plus loin dans le chapitre Tableaux statiques, introduction conteneurs - Apports du C++ - Introduction des conteneurs).

Le C++ propose cependant une autre version de la boucle for pour le parcours d’un tableau ou d’un conteneur. La boucle ordinaire est la suivante :

int tab[] { 1, 2, 3, 4, 5 }; 
for (int i = 0; i < 5; i++) 
    cout << tab[i] << ' '; // affiche 1 2 3 4 5 
cout << endl; 

Il y a maintenant la possibilité de copier un par un chaque élément dans une variable de la boucle depuis le début jusqu’à la fin du tableau et sans se soucier de sa taille de la façon suivante :

for (int i : tab) 
    cout << i << ' ';  // affiche 1 2 3 4 5 
cout << endl; 

La variable i ne représente plus un indice, mais copie successivement chaque élément du tableau et, à ce titre, doit être du même type. Ensuite vient l’opérateur : et le tableau lui-même. Attention toutefois, la variable i locale à la boucle est une copie, et modifier cette variable ne modifie pas le contenu du tableau.

Si l’on souhaite modifier le contenu du tableau, il faut spécifier comme variable une référence (les références sont présentées au chapitre Pointeurs) qui pointera successivement sur chaque élément du tableau :

#include<iostream> 
 
int main() 
{  
     int tab[] { 1, 2, 3, 4, 5 }; 
 
     // modifie...

Introduction des conteneurs

Les conteneurs sont des listes implémentées en C++ sous forme de classes. Un objet conteneur dispose de nombreuses fonctions puissantes et sécurisées pour toutes sortes de traitements, la plupart du temps associées aux listes (insertions, suppressions, tris, etc.). Ils bénéficient en outre d’une interface commune qui rend assez aisée leur utilisation.

Pour ces raisons, le programmeur C++, lorsqu’il a besoin de listes et des traitements spécifiques aux listes, préfère à juste titre utiliser des conteneurs.

Pour autant, l’usage des tableaux classiques hérités du C reste très pratique. Par exemple, en local dans une fonction, dès lors qu’il n’y a aucun traitement difficile de gestion de liste à effectuer.

Trois classes conteneurs sont incontournables : la classe array, la classe vector et la classe list. Avec ces classes, nous disposons de quatre opérations fondamentales : ajouter un élément, parcourir la liste, accéder à un élément et supprimer un élément. Chacun de ces points est abordé ci-dessous avec du code commenté pour chacun des trois types de listes.

1. La classe array

Cette classe donne des méthodes pour la gestion d’un tableau à taille fixe. Pour l’utiliser, il faut inclure la bibliothèque <array>.

Ce premier exemple porte sur un tableau d’entiers :

#include <iostream> 
#include <array> // ne pas oublier 
 
int main() 
{ 
    // correspond à un tableau statique ordinaire 
    std::array<int, 10> tab; 
 
    // ajouter : pas possible 
 
    // parcourir et accèdera aux éléments...