Trova la dimensione dell'array in C++
-
Usa l’operatore
sizeof
per calcolare la dimensione dell’array in stile C in C++ -
Usa il contenitore
std::array
per memorizzare i dati dell’array e calcolarne le dimensioni -
Usa il contenitore
std::vector
per memorizzare i dati dell’array e calcolarne le dimensioni -
Usa il metodo
std::size
per calcolare la dimensione dell’array
Questo articolo introdurrà come ottenere la dimensione dell’array utilizzando diversi metodi C++.
Usa l’operatore sizeof
per calcolare la dimensione dell’array in stile C in C++
Per prima cosa, diamo un’occhiata a cosa succede quando proviamo a trovare la dimensione degli array in stile C. Per il bene di questo esempio, definiamo una variabile c_array
e la inizializziamo con 10 valori interi. Per calcolare la dimensione di questo array, usiamo l’operatore unario sizeof
, che restituisce la dimensione dell’oggetto in byte. Fondamentalmente, dividiamo il numero di byte necessari per memorizzare l’oggetto c_array
con la dimensione del suo singolo elemento c_array[0]
:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {
int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "array size: " << sizeof c_array / sizeof c_array[0] << endl;
return 0;
}
Produzione:
array size : 10
Come puoi vedere, l’output sembra corretto. Ora proviamo a definire una funzione separata che fa lo stesso per noi:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int get_array_size(int arr[]) { return sizeof arr / sizeof arr[0]; }
int main() {
int c_array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "array size: " << get_array_size(c_array) << endl;
return 0;
}
Produzione:
array size : 2
Abbiamo sbagliato numero. L’utilizzo dell’operatore sizeof
non è un metodo affidabile per risolvere questo problema. Affinché l’operatore sizeof
funzioni correttamente, l’array non dovrebbe essere ricevuto come parametro di funzione e non dovrebbe essere allocato dinamicamente (sull’Heap). Per identificare un uso errato di sizeof
, gli IDE di solito lanceranno le sezioni di codice soggette a errori, ma puoi anche specificare i flag del compilatore per gli avvisi da visualizzare durante la compilazione (ad esempio -Wsizeof-pointer-div
o -Wall
insieme a gcc
).
Non esiste un modo universale per calcolare la dimensione degli array in stile C senza preoccuparsi di molti casi limite, ed è per questo che esiste la classe std::vector
.
Usa il contenitore std::array
per memorizzare i dati dell’array e calcolarne le dimensioni
Prima di addentrarci nell’uso di std::vector
, dovremmo menzionare std::array
, che puoi usare per memorizzare array di dimensioni fisse. Trae vantaggio dall’efficienza delle risorse e dispone di un metodo integrato per recuperare la dimensione chiamata size()
.
#include <array>
#include <iostream>
using std::array;
using std::cin;
using std::cout;
using std::endl;
int main() {
array<int, 10> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "array size: " << arr.size() << endl;
return 0;
}
Usa il contenitore std::vector
per memorizzare i dati dell’array e calcolarne le dimensioni
Il contenitore std::vector
può essere usato per memorizzare array dinamici e offre più metodi per diverse operazioni, incluso size()
.
#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::vector;
int main() {
vector<int> int_array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "vector size: " << int_array.size() << endl;
return 0;
}
Usa il metodo std::size
per calcolare la dimensione dell’array
Il metodo std::size
fa parte della libreria <iterator>
e può operare sui dati std::array
così come sul numero di elementi restituiti da std::vector
.
#include <array>
#include <iostream>
#include <vector>
using std::array;
using std::cin;
using std::cout;
using std::endl;
using std::size;
using std::vector;
int main() {
vector<int> int_array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
array<int, 10> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
cout << "vector size: " << size(int_array) << endl;
cout << "array size: " << size(arr) << endl;
return 0;
}
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