Initialiser un tableau d'objets en C++
-
Utilisez le
new
opérateur pour initialiser un tableau d’objets avec des constructeurs paramétrés en C++ -
Utilisez la fonction
std::vector::push_back
pour initialiser un tableau d’objets avec des constructeurs paramétrés -
Utilisez la fonction
std::vector::emplace_back
pour initialiser un tableau d’objets avec des constructeurs paramétrés
Cet article présente plusieurs méthodes sur l’initialisation d’un tableau d’objets avec des constructeurs paramétrés en C++.
Utilisez le new
opérateur pour initialiser un tableau d’objets avec des constructeurs paramétrés en C++
L’opérateur new
fait partie de l’interface de gestion dynamique de la mémoire C++, et il est équivalent à la fonction malloc
du langage C. Notez que la gestion dynamique de la mémoire implique le flux dans lequel l’utilisateur alloue la mémoire d’une taille fixe spécifiée et la renvoie au système lorsqu’elle n’est plus nécessaire.
new
est utilisé pour demander le nombre fixe d’octets au système, qui renvoie le pointeur vers la région mémoire si l’appel réussit. Dans l’exemple suivant, nous avons défini une classe nommée Pair
avec deux constructeurs et printPair
pour afficher les données membres vers la console. Au début, nous devons allouer un tableau de quatre membres de Pair
en utilisant l’opérateur new
. Ensuite, nous pouvons parcourir le tableau avec la boucle for
, et chaque itération initialise l’élément avec le constructeur paramétré. Notez cependant que le tableau alloué doit être libéré avant la fin du programme en utilisant l’opérateur delete
. Notez également que la notation delete []
est nécessaire pour désallouer chaque élément du tableau.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
class Pair {
int x, y;
public:
Pair() = default;
Pair(int a, int b) : x(a), y(b) {}
void printPair() const { cout << "x: " << x << endl << "y: " << y << endl; }
};
int main() {
Pair *arr = new Pair[4];
for (int i = 0; i < 4; ++i) {
arr[i] = Pair(i * 2, i * i);
}
for (int i = 0; i < 4; ++i) {
arr[i].printPair();
}
delete[] arr;
return EXIT_SUCCESS;
}
Production:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
Utilisez la fonction std::vector::push_back
pour initialiser un tableau d’objets avec des constructeurs paramétrés
Alternativement, une approche plus sans tête serait de stocker les objets dans le conteneur std::vector
, qui fournirait la fonction intégrée pour initialiser dynamiquement de nouveaux éléments. A savoir, la définition Pair
reste la même, mais à chaque itération, nous appellerons la fonction push_back
et lui passerons la valeur Pair
du deuxième constructeur. Du côté positif, nous n’avons pas à nous soucier de la désallocation des ressources mémoire; ils sont nettoyés automatiquement.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
class Pair {
int x, y;
public:
Pair() = default;
Pair(int a, int b) : x(a), y(b) {}
void printPair() const { cout << "x: " << x << endl << "y: " << y << endl; }
};
int main() {
vector<Pair> array;
for (int i = 0; i < 4; ++i) {
array.push_back(Pair(i * 2, i * i));
}
for (const auto &item : array) {
item.printPair();
}
return EXIT_SUCCESS;
}
Production:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
Utilisez la fonction std::vector::emplace_back
pour initialiser un tableau d’objets avec des constructeurs paramétrés
Une autre méthode pour initialiser un tableau d’objets avec des constructeurs paramétrés est d’utiliser la fonction emplace_back
de la classe std::vector
. De cette façon, il suffit de passer les valeurs du constructeur Pair
, et emplace_back
construirait automatiquement un nouvel élément pour nous. Comme la méthode précédente, celle-ci ne nécessite pas non plus que l’utilisateur se soucie de la gestion de la mémoire.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;
class Pair {
int x, y;
public:
Pair() = default;
Pair(int a, int b) : x(a), y(b) {}
void printPair() const { cout << "x: " << x << endl << "y: " << y << endl; }
};
int main() {
vector<Pair> array;
for (int i = 0; i < 4; ++i) {
array.emplace_back(i * 2, i * i);
}
for (const auto &item : array) {
item.printPair();
}
return EXIT_SUCCESS;
}
Production:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
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