Trova la dimensione dell'array in C++

Jinku Hu 12 ottobre 2023
  1. Usa l’operatore sizeof per calcolare la dimensione dell’array in stile C in C++
  2. Usa il contenitore std::array per memorizzare i dati dell’array e calcolarne le dimensioni
  3. Usa il contenitore std::vector per memorizzare i dati dell’array e calcolarne le dimensioni
  4. Usa il metodo std::size per calcolare la dimensione dell’array
Trova la dimensione dell'array in C++

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;
}
Autore: 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

Articolo correlato - C++ Array