Array von Objekten in C++ Initialisieren
-
Verwenden Sie den Operator
new
, um ein Array von Objekten mit parametrisierten Konstruktoren in C++ zu initialisieren -
Verwendung von die Funktion
std::vector::push_back
zum ein Array von Objekten mit parametrisierten Konstruktoren zu initialisieren -
Verwendung von die Funktion
std::vector::emplace_back
zum ein Array von Objekten mit parametrisierten Konstruktoren zu 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
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