Créer un vecteur de pointeurs en C++

  1. Utiliser la notation [] pour créer un vecteur de pointeurs en C++
  2. Utiliser le new opérateur pour créer un vecteur de pointeurs sur la mémoire dynamique en C++
  3. Utilisez le conteneur std::vector pour créer un vecteur de pointeurs en C++

Cet article explique plusieurs méthodes de création d’un vecteur de pointeurs en C++.

Utiliser la notation [] pour créer un vecteur de pointeurs en C++

Comme les types de pointeurs peuvent être modifiés facilement, nous utiliserons int * dans les exemples suivants pour déclarer un vecteur de pointeurs. Alternativement, nous pouvons utiliser le pointeur void * si vous avez besoin d’un type d’adresse générique pour stocker des structures de données opaques ou, au contraire, utiliser un pointeur vers une classe définie sur mesure.

Cette solution utilise une notation de tableau de style C - [] qui déclare un tableau de longueur fixe. Elle est similaire à la déclaration normale de tableau, mais dans ce cas, nous sommes intéressés par l’accès aux adresses de chaque élément. Nous utilisons l’opérateur & (adresse de) pour accéder aux pointeurs dans le vecteur et les imprimer sur la console. Notez que ces adresses sont situées sur la mémoire de la pile.

#include <iostream>
#include <vector>

using std::cout;
using std::vector;
using std::endl;

constexpr int WIDTH = 8;

int main()
{
    int *pointers_vec[WIDTH];

    cout << "pointers_vec addresses:" << endl;
    for(auto &i : pointers_vec) {
        cout << &i << endl;
    }
    cout << endl;

    return EXIT_SUCCESS;
}

Production :

pointers_vec addresses:
0x7ffecd7a00d0
0x7ffecd7a00d8
0x7ffecd7a00e0
0x7ffecd7a00e8
0x7ffecd7a00f0
0x7ffecd7a00f8
0x7ffecd7a0100
0x7ffecd7a0108

Utiliser le new opérateur pour créer un vecteur de pointeurs sur la mémoire dynamique en C++

D’autre part, nous pouvons utiliser le new opérateur pour créer un vecteur de pointeurs alloués dynamiquement sur le tas.

Cette solution exige du programmeur qu’il libère la mémoire avant que le programme ne se termine ; sinon, le code souffrira de la fuite de mémoire, ce qui peut constituer un problème massif dans les applications de longue durée et les environnements matériels à ressources limitées. Notez que nous utilisons la notation delete [] pour nettoyer chaque emplacement dans un vecteur alloué dynamiquement.

#include <iostream>
#include <vector>

using std::cout;
using std::vector;
using std::endl;

constexpr int WIDTH = 8;

int main()
{
    int *vector_of_pointers = new int[WIDTH];

    cout << "vector_of_pointers addresses:" << endl;
    for(int i = 0; i < WIDTH; ++i) {
        cout << &vector_of_pointers[i] << endl;
    }
    cout << endl;

    delete [] vector_of_pointers;
    return EXIT_SUCCESS;
}

Production :

vector_of_pointers addresses:
0x2561c20
0x2561c28
0x2561c30
0x2561c38
0x2561c40
0x2561c48
0x2561c50
0x2561c58

Utilisez le conteneur std::vector pour créer un vecteur de pointeurs en C++

La fonction std::vector offre une riche fonctionnalité pour allouer un vecteur de pointeurs et manipuler le vecteur avec de multiples fonctions intégrées. Cette méthode offre une interface plus souple pour la création de nouveaux éléments pendant l’exécution. Notez que nous avons initialisé les éléments du vecteur avec la valeur nullptr, comme le montre l’exemple suivant.

#include <iostream>
#include <vector>

using std::cout;
using std::vector;
using std::endl;

constexpr int WIDTH = 8;

int main()
{
    vector<int *> vector_p(WIDTH, nullptr);

    cout << "vector_p addresses:" << endl;
    for(int i = 0; i < WIDTH; ++i) {
        cout << &vector_p[i] << endl;
    }
    cout << endl;

    return EXIT_SUCCESS;
}

Production :

vector_p addresses:
0x1255c20
0x1255c28
0x1255c30
0x1255c38
0x1255c40
0x1255c48
0x1255c50
0x1255c58

Article connexe - C++ Pointer

  • Comment vérifier si le pointeur est NULL en C++
  • Accéder aux fonctions des membres depuis un pointeur jusqu'à un vecteur en C++