Un tableau en C++ est une collection d’éléments de même type, stockés de manière contiguë en mémoire. Les tableaux peuvent être utilisés pour stocker des données de manière structurée et pour effectuer des opérations sur ces données de manière efficace.

Voici un exemple de déclaration et d’initialisation d’un tableau en C++:

#include <iostream>
using namespace std;

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i < 5; i++) {
        cout << numbers[i] << " ";
    }
    cout << endl;
    return 0;
}

Dans cet exemple, nous avons déclaré un tableau numbers de type int et de taille 5. Nous avons ensuite initialisé ce tableau avec les valeurs {1, 2, 3, 4, 5}. Dans la boucle for, nous parcourons les éléments du tableau en utilisant l’indice i et nous affichons chaque élément à l’écran en utilisant la fonction cout.

Les tableaux en C++ ont une taille fixe qui doit être spécifiée lors de leur déclaration. Il est possible d’initialiser un tableau avec des valeurs spécifiques lors de sa déclaration, ou de lui affecter des valeurs ultérieurement en utilisant l’opérateur d’indexation [].

Il existe également d’autres types de tableaux en C++, tels que les tableaux à deux dimensions (matrices) et les tableaux dynamiques (vecteurs). Les tableaux à deux dimensions peuvent être utilisés pour stocker des données sous forme de grille, tandis que les vecteurs sont des tableaux dont la taille peut changer dynamiquement pendant l’exécution du programme.

En résumé, les tableaux en C++ sont des structures de données puissantes qui permettent de stocker et de manipuler des collections d’éléments de manière efficace. Ils peuvent être utilisés pour résoudre une grande variété de problèmes en programmation. 

 

Tableaux de taille fixe

Les tableaux à taille fixe en C++ sont des collections d’éléments de même type, stockés de manière contiguë en mémoire. La taille d’un tableau à taille fixe doit être spécifiée lors de sa déclaration et ne peut pas être modifiée par la suite.

Les tableaux à taille fixe présentent plusieurs avantages en termes de performance et d’utilisation de la mémoire. Tout d’abord, comme les éléments d’un tableau à taille fixe sont stockés de manière contiguë en mémoire, l’accès aux éléments du tableau est très rapide. En effet, l’adresse mémoire d’un élément peut être calculée directement à partir de son indice dans le tableau, ce qui permet d’accéder à cet élément en temps constant.

De plus, les tableaux à taille fixe n’ont pas besoin d’être redimensionnés pendant l’exécution du programme, ce qui évite les coûts de réallocation de mémoire et de copie des éléments. Cela peut être particulièrement avantageux pour les programmes qui manipulent de grandes quantités de données.

Enfin, les tableaux à taille fixe peuvent être utilisés avec des fonctions et des algorithmes standard de la bibliothèque C++, tels que std::sort et std::binary_search, pour effectuer des opérations complexes sur les données de manière efficace.

En résumé, les tableaux à taille fixe en C++ offrent des performances élevées et une utilisation efficace de la mémoire pour stocker et manipuler des collections d’éléments. Ils peuvent être utilisés avec des fonctions et des algorithmes standard pour effectuer des opérations complexes sur les données. 


Tableaux dynamiques

Les tableaux dynamiques en C++ sont des collections d’éléments de même type, stockés de manière contiguë en mémoire, dont la taille peut être modifiée pendant l’exécution du programme. La classe std::vector de la bibliothèque standard C++ fournit une implémentation efficace des tableaux dynamiques.

Les tableaux dynamiques présentent plusieurs avantages par rapport aux tableaux à taille fixe. Tout d’abord, ils peuvent être redimensionnés pendant l’exécution du programme pour s’adapter aux besoins en données. Cela permet d’utiliser les tableaux dynamiques pour stocker des collections d’éléments dont la taille n’est pas connue à l’avance.

De plus, les tableaux dynamiques offrent une interface riche et facile à utiliser pour manipuler les données. Ils fournissent des méthodes pour ajouter, supprimer et accéder aux éléments, ainsi que pour effectuer des opérations complexes telles que le tri et la recherche.

Cependant, les tableaux dynamiques ont également quelques inconvénients. Leur principal inconvénient est qu’ils peuvent être moins performants que les tableaux à taille fixe pour certaines opérations. Par exemple, redimensionner un tableau dynamique peut nécessiter de réallouer de la mémoire et de copier les éléments, ce qui peut être coûteux en termes de temps d’exécution.

En résumé, les tableaux dynamiques en C++ offrent une grande flexibilité pour stocker et manipuler des collections d’éléments dont la taille peut varier pendant l’exécution du programme. Ils fournissent une interface riche et facile à utiliser, mais peuvent être moins performants que les tableaux à taille fixe pour certaines opérations.

Voici un exemple de code en C++ qui montre comment utiliser un tableau dynamique (vecteur):

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

int main() {
    // Déclaration et initialisation d'un vecteur
    vector<int> numbers = {1, 2, 3, 4, 5};

    // Affichage des éléments du vecteur
    for (int i = 0; i < numbers.size(); i++) {
        cout << numbers[i] << " ";
    }
    cout << endl;

    // Ajout d'un élément au vecteur
    numbers.push_back(6);

    // Suppression du premier élément du vecteur
    numbers.erase(numbers.begin());

    // Affichage des éléments du vecteur
    for (int i = 0; i < numbers.size(); i++) {
        cout << numbers[i] << " ";
    }
    cout << endl;

    return 0;
}

Dans cet exemple, nous avons déclaré un vecteur numbers de type int et l’avons initialisé avec les valeurs {1, 2, 3, 4, 5}. Nous avons ensuite utilisé une boucle for pour parcourir les éléments du vecteur et les afficher à l’écran en utilisant la fonction cout.

Nous avons également utilisé les méthodes push_back et erase pour ajouter un élément à la fin du vecteur et supprimer le premier élément du vecteur, respectivement. Nous avons ensuite affiché à nouveau les éléments du vecteur pour montrer les modifications apportées.

Lorsque nous exécutons ce code, nous obtenons le résultat suivant:

1 2 3 4 5
2 3 4 5 6

En résumé, cet exemple montre comment déclarer, initialiser et utiliser un tableau dynamique (vecteur) en C++. Les vecteurs offrent une grande flexibilité pour stocker et manipuler des collections d’éléments dont la taille peut varier pendant l’exécution du programme. Ils fournissent des méthodes pour ajouter, supprimer et accéder aux éléments de manière efficace. 

 

Les matrices

Une matrice en C++ est un tableau à deux dimensions, c’est-à-dire un tableau de tableaux. Les matrices peuvent être utilisées pour stocker des données sous forme de grille, comme dans une feuille de calcul ou une image.

Les matrices présentent plusieurs avantages en termes d’organisation et de manipulation des données. Tout d’abord, elles permettent de stocker des données sous forme de grille, ce qui facilite l’accès aux éléments individuels et la réalisation d’opérations sur les lignes et les colonnes. De plus, les matrices peuvent être utilisées avec des fonctions et des algorithmes standard de la bibliothèque C++, tels que std::sort et std::binary_search, pour effectuer des opérations complexes sur les données.

Cependant, les matrices ont également quelques inconvénients. Leur principal inconvénient est qu’elles ont une taille fixe qui doit être spécifiée lors de leur déclaration et ne peut pas être modifiée par la suite. Cela peut limiter leur utilisation pour stocker des données dont la taille n’est pas connue à l’avance. De plus, les matrices peuvent être plus difficiles à manipuler que les tableaux à une dimension en raison de leur structure à deux dimensions.

En résumé, les matrices en C++ sont des structures de données puissantes qui permettent de stocker et de manipuler des données sous forme de grille. Elles offrent des avantages en termes d’organisation et de manipulation des données, mais peuvent être plus difficiles à utiliser que les tableaux à une dimension en raison de leur taille fixe et de leur structure à deux dimensions.

Voici un exemple de code en C++ qui montre comment utiliser une matrice (tableau à deux dimensions):

#include <iostream>
using namespace std;

int main() {
    // Déclaration et initialisation d'une matrice 3x3
    int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

    // Affichage des éléments de la matrice
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

Dans cet exemple, nous avons déclaré une matrice matrix de taille 3x3 et l’avons initialisée avec les valeurs {1, 2, 3}, {4, 5, 6}, {7, 8, 9}. Nous avons ensuite utilisé deux boucles for imbriquées pour parcourir les éléments de la matrice et les afficher à l’écran en utilisant la fonction cout.

Lorsque nous exécutons ce code, nous obtenons le résultat suivant:

1 2 3
4 5 6
7 8 9

En résumé, cet exemple montre comment déclarer, initialiser et utiliser une matrice (tableau à deux dimensions) en C++. Les matrices peuvent être utilisées pour stocker des données sous forme de grille et pour effectuer des opérations sur ces données de manière efficace. 

 

les matrices dynamiques

Une matrice dynamique en C++ est créée en utilisant un vecteur de vecteurs. Voici un exemple de code qui montre comment créer et utiliser une matrice dynamique en C++:

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

int main() {
    // Déclaration et initialisation d'une matrice dynamique 3x3
    vector<vector<int>> matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

    // Affichage des éléments de la matrice
    for (int i = 0; i < matrix.size(); i++) {
        for (int j = 0; j < matrix[i].size(); j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    // Ajout d'une ligne à la matrice
    matrix.push_back({10, 11, 12});

    // Suppression de la première colonne de la matrice
    for (int i = 0; i < matrix.size(); i++) {
        matrix[i].erase(matrix[i].begin());
    }

    // Affichage des éléments de la matrice
    for (int i = 0; i < matrix.size(); i++) {
        for (int j = 0; j < matrix[i].size(); j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

Dans cet exemple, nous avons déclaré une matrice dynamique matrix en utilisant un vecteur de vecteurs. Nous avons initialisé cette matrice avec les valeurs {1, 2, 3}, {4, 5, 6}, {7, 8, 9} pour créer une matrice 3x3. Nous avons ensuite utilisé deux boucles for imbriquées pour parcourir les éléments de la matrice et les afficher à l’écran en utilisant la fonction cout.

Nous avons également utilisé les méthodes push_back et erase pour ajouter une ligne à la fin de la matrice et supprimer la première colonne de la matrice, respectivement. Nous avons ensuite affiché à nouveau les éléments de la matrice pour montrer les modifications apportées.

Lorsque nous exécutons ce code, nous obtenons le résultat suivant:

1 2 3
4 5 6
7 8 9
2 3
5 6
8 9
11 12

En résumé, cet exemple montre comment créer et utiliser une matrice dynamique en C++ en utilisant un vecteur de vecteurs. Les matrices dynamiques offrent une grande flexibilité pour stocker et manipuler des données sous forme de grille dont la taille peut varier pendant l’exécution du programme. Elles fournissent des méthodes pour ajouter et supprimer des lignes et des colonnes de manière efficace. 

 

Comment éviter de fragmenter la mémoire quand on manipule des tableaux.

 

Il existe plusieurs façons d’éviter la fragmentation de la mémoire lors de la manipulation de tableaux en C++. L’une des méthodes consiste à utiliser des fonctions de gestion de mémoire dynamique telles que malloccalloc et realloc pour allouer et libérer de la mémoire de manière contrôlée. Ces fonctions sont disponibles dans l’en-tête <stdlib.h> .

Il est important de suivre les bonnes pratiques lors de l’utilisation de ces fonctions pour éviter les erreurs courantes telles que les fuites de mémoire et les références multiples à une même zone mémoire . 

Voici un exemple de code en C++ qui utilise les fonctions malloccalloc et realloc pour allouer et réallouer de la mémoire dynamiquement:

#include <iostream>
#include <cstdlib>

int main() {
    // Utilisation de malloc pour allouer un tableau de 5 entiers
    int *arr = (int*)malloc(5 * sizeof(int));
    for (int i = 0; i < 5; i++) {
        arr[i] = i;
    }

    // Utilisation de calloc pour allouer un tableau de 10 entiers
    int *arr2 = (int*)calloc(10, sizeof(int));
    for (int i = 0; i < 10; i++) {
        arr2[i] = i;
    }

    // Utilisation de realloc pour redimensionner le premier tableau à 10 entiers
    arr = (int*)realloc(arr, 10 * sizeof(int));
    for (int i = 5; i < 10; i++) {
        arr[i] = i;
    }

    // Affichage des tableaux
    std::cout << "Tableau 1: ";
    for (int i = 0; i < 10; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    std::cout << "Tableau 2: ";
    for (int i = 0; i < 10; i++) {
        std::cout << arr2[i] << " ";
    }
    std::cout << std::endl;

    // Libération de la mémoire
    free(arr);
    free(arr2);

    return 0;
}

Ce code utilise malloc pour allouer un tableau de 5 entiers, puis utilise calloc pour allouer un autre tableau de 10 entiers. Ensuite, il utilise realloc pour redimensionner le premier tableau à 10 entiers. Enfin, il affiche les deux tableaux et libère la mémoire allouée avec free.

 

En résumé

C++ c'est génial mais c'est complexe des que l'on gère des tableaux en mémoire !

Il y a:

Les tableaux fixes perfomants mais dont la taille est fixe

Les tableaux dynamiques avec vecteur plus lent mais qui permetent facilement de modifier la taille du tableaux.

Et les matrices qui sont des tableaux de tableaux fixes ou dynamiques 

 

 

Last modified: Friday, 4 August 2023, 4:31 AM