Inizializza il vettore di Structs in C++

Jinku Hu 12 ottobre 2023
  1. Utilizzare il costruttore dell’lista di inizializzatori per inizializzare un vettore di Structs in C++
  2. Usa Range Constructor per inizializzare un vettore di Structs in C++
  3. Usa il costruttore personalizzato per inizializzare un vettore di Struct in C++
Inizializza il vettore di Structs in C++

Questo articolo illustrerà più metodi su come inizializzare un vettore di strutture in C++.

Utilizzare il costruttore dell’lista di inizializzatori per inizializzare un vettore di Structs in C++

Una lista di inizializzatori è un modo comune per inizializzare contenitori con valori costanti. Questo metodo è più adatto per strutture dati che devono avere uno stato iniziale di qualche tipo. Nell’esempio seguente, poiché il vettore contiene strutture Person definite dall’utente, gli elementi dell’lista degli inizializzatori devono essere raggruppati all’interno di parentesi graffe e separati da due punti. Nota che gli elementi della struct sono accessibili usando la notazione struct.element e inviati alla 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;
}

Produzione:

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

Usa Range Constructor per inizializzare un vettore di Structs in C++

In alternativa, il costruttore di intervalli può essere utilizzato per inizializzare il vettore di strutture. Questo metodo è utile quando è necessario creare un’altra copia dell’oggetto vettore esistente. Come mostrato nel seguente esempio di codice, dichiariamo un vettore parr3 di struct Person e lo inizializziamo con il contenuto del vettore parr1 dello stesso tipo.

#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;
}

Produzione:

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

Usa il costruttore personalizzato per inizializzare un vettore di Struct in C++

Un’altra soluzione è un costruttore specifico per vettore, che fornisce una funzionalità per inizializzare un vettore con un dato numero degli stessi valori. In questo caso, forniamo al costruttore un singolo elemento di tipo struct Person e un numero arbitrario 3 per inizializzare l’oggetto.

#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;
}

Produzione:

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

Articolo correlato - C++ Vector