Vektor von Structs in C++ initialisieren

Jinku Hu 12 Oktober 2023
  1. Verwenden des Initialisierungslisten-Konstruktors zum Initialisieren eines Vektors von Strukturen in C++
  2. Verwenden des Range-Konstruktors zum Initialisieren eines Vektors von Strukturen in C++
  3. Verwenden des benutzerdefinierten Konstruktors zum Initialisieren eines Vektors von Strukturen in C++
Vektor von Structs in C++ initialisieren

Dieser Artikel demonstriert mehrere Methoden, wie ein Vektor von Structs in C++ initialisiert werden kann.

Verwenden des Initialisierungslisten-Konstruktors zum Initialisieren eines Vektors von Strukturen in C++

Eine Initialisierungsliste ist eine gängige Methode, um Container mit konstanten Werten zu initialisieren. Diese Methode eignet sich besser für Datenstrukturen, die einen Startzustand irgendeiner Art haben müssen. Da der vector im folgenden Beispiel benutzerdefinierte Person-Strukturen enthält, müssen die Elemente der Initialisierungsliste in geschweiften Klammern gruppiert und durch Doppelpunkte getrennt werden. Beachten Sie, dass auf die Elemente der struct mit der Notation struct.element zugegriffen wird und diese auf der Konsole ausgegeben werden.

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

Ausgabe:

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

Verwenden des Range-Konstruktors zum Initialisieren eines Vektors von Strukturen in C++

Alternativ kann auch der Range-Konstruktor verwendet werden, um den vector von Structs zu initialisieren. Diese Methode ist nützlich, wenn man eine weitere Kopie des bestehenden vector-Objekts erstellen möchte. Wie im folgenden Codebeispiel gezeigt, deklarieren wir einen parr3-Vektor von struct Person und initialisieren ihn mit dem Inhalt des parr1-Vektors desselben Typs.

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

Ausgabe:

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

Verwenden des benutzerdefinierten Konstruktors zum Initialisieren eines Vektors von Strukturen in C++

Eine andere Lösung ist ein vector-spezifischer Konstruktor, der eine Funktion zur Initialisierung eines Vektors mit einer gegebenen Anzahl gleicher Werte bietet. In diesem Fall übergeben wir dem Konstruktor ein einzelnes Element vom Typ struct Person und eine beliebige Zahl 3, um das Objekt zu initialisieren.

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

Ausgabe:

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

Verwandter Artikel - C++ Vector