Initialiser un tableau d'objets en C++

Jinku Hu 12 octobre 2023
  1. Utilisez le new opérateur pour initialiser un tableau d’objets avec des constructeurs paramétrés en C++
  2. Utilisez la fonction std::vector::push_back pour initialiser un tableau d’objets avec des constructeurs paramétrés
  3. Utilisez la fonction std::vector::emplace_back pour initialiser un tableau d’objets avec des constructeurs paramétrés
Initialiser un tableau d'objets en C++

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
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C++ Array