Inizializza array di oggetti in C++
-
Usa il
new
operatore per inizializzare array di oggetti con costruttori parametrizzati in C++ -
Usa la funzione
std::vector::push_back
per inizializzare array di oggetti con costruttori parametrizzati -
Usa la funzione
std::vector::emplace_back
per inizializzare array di oggetti con costruttori parametrizzati
Questo articolo illustrerà più metodi sull’inizializzazione di una matrice di oggetti con costruttori parametrizzati in C++.
Usa il new
operatore per inizializzare array di oggetti con costruttori parametrizzati in C++
L’operatore new
fa parte dell’interfaccia di gestione dinamica della memoria C++, ed è equivalente alla funzione malloc
del linguaggio C. Si noti che la gestione dinamica della memoria implica il flusso in cui l’utente alloca la memoria di una dimensione fissa specificata e la restituisce al sistema quando non è più necessaria.
new
è usato per richiedere il numero fisso di byte dal sistema, che restituisce il puntatore alla regione di memoria se la chiamata ha successo. Nell’esempio seguente, abbiamo definito una classe denominata Pair
con due costruttori e printPair
per inviare in output i membri dati alla console. All’inizio, dobbiamo allocare un array di quattro membri di Pairs
usando l’operatore new
. Successivamente, possiamo attraversare l’array con il cicli for
e ogni iterazione inizializza l’elemento con il costruttore parametrizzato. Ricorda però che l’array allocato dovrebbe essere liberato prima che il programma esca usando l’operatore delete
. Notare anche che la notazione delete []
è necessaria per deallocare ogni elemento dell’array.
#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;
}
Produzione:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
Usa la funzione std::vector::push_back
per inizializzare array di oggetti con costruttori parametrizzati
In alternativa, un approccio più headless sarebbe quello di memorizzare gli oggetti nel contenitore std::vector
, che fornirebbe la funzione incorporata per inizializzare dinamicamente nuovi elementi. Vale a dire, la definizione Pair
rimane la stessa, ma ad ogni iterazione, chiameremo la funzione push_back
e passeremo il valore Pair
dal secondo costruttore. Tra i lati positivi, non dobbiamo preoccuparci della deallocazione delle risorse di memoria; vengono ripuliti automaticamente.
#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;
}
Produzione:
x: 0
y: 0
x: 2
y: 1
x: 4
y: 4
x: 6
y: 9
Usa la funzione std::vector::emplace_back
per inizializzare array di oggetti con costruttori parametrizzati
Un altro metodo per inizializzare un array di oggetti con costruttori parametrizzati consiste nell’utilizzare la funzione emplace_back
della classe std::vector
. In questo modo, dobbiamo solo passare i valori del costruttore Pair
e emplace_back
costruirà automaticamente un nuovo elemento per noi. Come il metodo precedente, anche questo non richiede che l’utente si preoccupi della gestione della memoria.
#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;
}
Produzione:
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