Array von Objekten in C++ Initialisieren

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie den Operator new, um ein Array von Objekten mit parametrisierten Konstruktoren in C++ zu initialisieren
  2. Verwendung von die Funktion std::vector::push_back zum ein Array von Objekten mit parametrisierten Konstruktoren zu initialisieren
  3. Verwendung von die Funktion std::vector::emplace_back zum ein Array von Objekten mit parametrisierten Konstruktoren zu initialisieren
Array von Objekten in C++ Initialisieren

Dieser Artikel zeigt verschiedene Methoden zum Initialisieren eines Arrays von Objekten mit parametrisierten Konstruktoren in C++.

Verwenden Sie den Operator new, um ein Array von Objekten mit parametrisierten Konstruktoren in C++ zu initialisieren

Der Operator new ist Teil der dynamischen Speicherverwaltungsschnittstelle von C++ und entspricht der Funktion malloc aus der C-Sprache. Beachten Sie, dass die dynamische Speicherverwaltung den Ablauf umfasst, in dem der Benutzer den Speicher einer bestimmten festen Größe zuweist und an das System zurückgibt, wenn er nicht mehr benötigt wird.

new wird verwendet, um die feste Anzahl von Bytes vom System anzufordern, das den Zeiger auf den Speicherbereich zurückgibt, wenn der Aufruf erfolgreich ist. Im folgenden Beispiel haben wir eine Klasse mit dem Namen Pair mit zwei Konstruktoren und printPair definiert, um die Datenelemente an die Konsole auszugeben. Zuerst müssen wir mit dem Operator new ein vierköpfiges Array von Pairs zuweisen. Als nächstes können wir das Array mit der for-Schleife durchlaufen und jede Iteration initialisiert das Element mit dem parametrisierten Konstruktor. Beachten Sie jedoch, dass das zugewiesene Array vor dem Beenden des Programms mit dem Operator delete freigegeben werden sollte. Beachten Sie auch, dass die Notation delete [] erforderlich ist, um die Zuordnung jedes Elements des Arrays aufzuheben.

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

Ausgabe:

x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9

Verwendung von die Funktion std::vector::push_back zum ein Array von Objekten mit parametrisierten Konstruktoren zu initialisieren

Alternativ wäre ein kopfloserer Ansatz, die Objekte im Container std::vector zu speichern, der die integrierte Funktion zum dynamischen Initialisieren neuer Elemente bietet. Die Definition Pair bleibt nämlich gleich, aber bei jeder Iteration rufen wir die Funktion push_back auf und übergeben ihr den Wert Paar vom zweiten Konstruktor. Auf der positiven Seite müssen wir uns keine Sorgen um die Freigabe der Speicherressourcen machen. Sie werden automatisch aufgeräumt.

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

Ausgabe:

x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9

Verwendung von die Funktion std::vector::emplace_back zum ein Array von Objekten mit parametrisierten Konstruktoren zu initialisieren

Eine andere Methode zum Initialisieren eines Arrays von Objekten mit parametrisierten Konstruktoren besteht darin, die Funktion emplace_back der Klasse std::vector zu verwenden. Auf diese Weise müssen wir nur die Werte des Konstruktors Pair übergeben, und emplace_back würde automatisch ein neues Element für uns erstellen. Wie bei der vorherigen Methode muss sich auch hier der Benutzer nicht um die Speicherverwaltung kümmern.

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

Ausgabe:

x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
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++ Array