Initialiser le vecteur de structures en C++

  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++

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::vector; using std::string;

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::vector; using std::string;

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::vector; using std::string;

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

Article connexe - C++ Vector

  • Calculer le produit scalaire de deux vecteurs en C++
  • Accéder aux fonctions des membres depuis un pointeur jusqu'à un vecteur en C++