Créer un vecteur de pointeurs en C++
-
Utiliser la notation
[]
pour créer un vecteur de pointeurs en C++ -
Utiliser le
new
opérateur pour créer un vecteur de pointeurs sur la mémoire dynamique en C++ -
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::endl;
using std::vector;
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::endl;
using std::vector;
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::endl;
using std::vector;
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
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook