Initialiser le vecteur de structures en C++

Jinku Hu 12 octobre 2023
  1. Utiliser le constructeur de liste d’initialisation pour initialiser un vecteur de structs en C++
  2. Utiliser le Range Constructor pour initialiser un vecteur de structures en C++
  3. Utiliser le constructeur personnalisé pour initialiser un vecteur de structures en C++
Initialiser le vecteur de structures en C++

Cet article présente plusieurs méthodes pour initialiser un vecteur de structs en C++.

Utiliser le constructeur de liste d’initialisation pour initialiser un vecteur de structs en C++

Une liste d’initialisation est une façon courante d’initialiser des conteneurs avec des valeurs constantes. Cette méthode est mieux adaptée aux structures de données qui doivent avoir un état de départ quelconque. Dans l’exemple ci-dessous, puisque le vector contient des structures Person personnalisées, les éléments de la liste d’initialisation doivent être regroupés entre des parenthèses et séparés par des deux points. Notez que les éléments de la struct sont accessibles en utilisant la notation struct.element et transmis à la console.

#include <iostream>
#include <string>
#include <vector>

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

struct Person {
  string name;
  string surname;
  int age;
};

int main() {
  vector<Person> parr1 = {{"John", "Cooper", 32},
                          {"Theo", "Parrot", 23},
                          {"Aun", "Chao", 43},
                          {"Vivien", "Bardot", 67}};

  for (const auto &arr : parr1) {
    cout << "Name: " << arr.name << endl
         << "Surname: " << arr.surname << endl
         << "Age: " << arr.age << endl;
  }

  return EXIT_SUCCESS;
}

Production :

Name: John
Surname: Cooper
Age: 32
Name: Theo
Surname: Parrot
Age: 23
Name: Aun
Surname: Chao
Age: 43
Name: Vivien
Surname: Bardot
Age: 67

Utiliser le Range Constructor pour initialiser un vecteur de structures en C++

Alternativement, le constructeur de gamme peut être utilisé pour initialiser le vector de structs. Cette méthode est utile quand on a besoin de créer une autre copie de l’objet vector existant. Comme le montre l’exemple de code suivant, on déclare un vecteur parr3 de structure Person et on l’initialise avec le contenu du vecteur parr1 du même type.

#include <iostream>
#include <string>
#include <vector>

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

struct Person {
  string name;
  string surname;
  int age;
};

int main() {
  vector<Person> parr1 = {
    {"John", "Cooper", 32}, {"Theo", "Parrot", 23}, {"Kim", "Colbert", 53},
    {"Aun", "Chao", 43},

    vector<Person> parr3(parr1.begin(), parr1.end());

  for (const auto &arr : parr3) {
    cout << "Name: " << arr.name << endl
         << "Surname: " << arr.surname << endl
         << "Age: " << arr.age << endl;
  }

  return EXIT_SUCCESS;
}

Production :

Name: John
Surname: Cooper
Age: 32
Name: Theo
Surname: Parrot
Age: 23
Name: Kim
Surname: Colbert
Age: 53
Name: Aun
Surname: Chao
Age: 43

Utiliser le constructeur personnalisé pour initialiser un vecteur de structures en C++

Une autre solution est un constructeur spécifique au vector, qui fournit une fonction permettant d’initialiser un vecteur avec un nombre donné de valeurs identiques. Dans ce cas, nous fournissons au constructeur un élément unique de type struct Person et un nombre arbitraire 3 pour initialiser l’objet.

#include <iostream>
#include <string>
#include <vector>

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

struct Person {
  string name;
  string surname;
  int age;
};

constexpr int NUM = 3;

int main() {
  vector<Person> parr4(NUM, {"John", "Cooper", 32});

  for (const auto &arr : parr4) {
    cout << "Name: " << arr.name << endl
         << "Surname: " << arr.surname << endl
         << "Age: " << arr.age << endl;
  }

  return EXIT_SUCCESS;
}

Production :

Name: John
Surname: Cooper
Age: 32
Name: John
Surname: Cooper
Age: 32
Name: John
Surname: Cooper
Age: 32
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++ Vector