feature image - https://source.unsplash.com/random/900×600/?wallpaper&sig=7849b8eb-75bb-4428-adb5-5855b8761d4d

Definire e inizializzare un array in C++ | std::array

Gli array in C++ sono definiti utilizzando la classe std::array di C++. La classe std::array è una classe di tipo template che permette di definire un array di un certo tipo e di specificare la dimensione. La dichiarazione del template viene fatta utilizzando le parentesi angolari <> specificando il tipo dell’array e la dimensione, separando i due parametri con una virgola.

Dichiarazione di una array in C++ utizzando la classe std::array

Per dichiarare ad esempio un array di 10 interi dobbiamo prima di tutto includere l’header <array> che contiene la dichiarazione della classe std::array. Quindi nel nostro programma potremo dichiarare il vettore richiesto in questo modo:

#include <array>
int main() {
std::array<int,10> a;


return 0;
}

Inizializzazione di un array in C++ con la classe std::array

Inizializzare tutti gli elementi di un array ad uno stesso valore

Per inizializzare l’array dichiarato prima dobbiamo utilizzare la funzione fill della classe std::array per inizializzare tutti i valori dell’array ad un unico valore.

#include <array>
int main() {
std::array<int,10> a;

a.fill(1); // inizializzo tutti gli elementi dell'array a 1

return 0;
}

Il contenuto di a dopo l’inizializzazione sará:

a=[1,1,1,1,1,1,1,1,1,1]a=\left[1,1,1,1,1,1,1,1,1,1\right]

Come puoi vedere utilizzare la calsse std::array per inizializzare un array è molto semplice perché un oggetto di una classe ci mette a disposizione dei metodi con cui possiamo chiedergli di fare delle cose. In questo caso std::array ha un metodo fill() che permette di inizializzare tutti gli elementi dell’array ad uno stesso valore. Ci sono anche numerosi altri metodi che possono essere utilizzati su di una classe std::array che vedremo in seguito.

Inizializzare un array con un ciclo for

Per inizializzare un array di classe std::arraycon un ciclo for dobbiamo utilizzare il metood size() che ritorna la dimensione dell’array. Questo perché una variabile di tipo std::array é un oggetto e come tale ci mette a disposizione i metodi della sua classe.

Per inizializzare quini l’array prima definito mettendo in ogni posizione il valore della posizione, ottennedo quindi alla fine un array cosí strutturato

a=[1,1,1,1,1,1,1,1,1,1]a=\left[1,1,1,1,1,1,1,1,1,1\right]

Dovremo utilizzare il seguente codice che fa uso del ficlo for:

#include <array>
int main() {
std::array<int,10> a;

for(int i=0;i<a.size();i++) {
a[i]=i;
}

return 0;
}

Dopo il ciclo il contenuto dell’array sará:

a=[0,1,2,3,4,5,6,7,8,9]a=\left[0,1,2,3,4,5,6,7,8,9\right]

Stampare un array in C++ con la classe std::array

Per stampare il contenuto di un array in C++ possiamo utilizzare due metodi:

stampa un array con un ciclo for

La stampa con un ciclo for ha senso quando dobbiamo utilizzare l’indice dell’elemento che stampiamo per fare ulteriori operazioni. Ad esempio se fossimo interessati a stampare non solo il valore dell’elemento ma anche l’indice dell’elemento questo sará il metodo da utilizzare. Per stampare dobbiamo ovviamente includere l’header <iostream> che contiene il metodo std::cout che permette di stampare un oggetto.

#include <iostream>
#include <array>
int main() {
std::array<int,10> a;

a.fill(1);

for(auto i =0;i< a.size(); i++) {
std::cout << i << " = " << a[i] << "\n";
}
return 0;
}

l’ouput sará:


0 = 1
1 = 1
2 = 1
3 = 1
4 = 1
5 = 1
6 = 1
7 = 1
8 = 1
9 = 1

stampa un array con un ciclo range for

Nel caso in siamo invece interessati solo al valore di ogni elemento dell’array, allora é ragionevole utilizzare il range for che permette di ciclare tutti gli elementi dell’array senza necessitá di utilizzare una variabile per l’indice. Dichiareremo nel for una variabile (usando la keyword auto cosí da far dedurre al compilatore il tipo corretto per la variabile) che sará il valore dell’elemento che stiamo ciclando.

#include <iostream>
#include <array>
int main() {
std::array<int,10> a;

a.fill(1);

for(auto el : a) {
std::cout << el << " ";
}
return 0;
}

l’ouput sará:


1 1 1 1 1 1 1 1 1 1

Esercizi sugli array

Andrea Pollini

Matematico, informatico.