Cómo encontrar el tamaño del array en C++

Jinku Hu 12 octubre 2023
  1. Usar el operador sizeof para calcular el tamaño del array de estilo C en C++
  2. Usa el contenedor std::array para almacenar los datos del array y calcular su tamaño
  3. Utilice el contenedor std::vector para almacenar los datos del array y calcular su tamaño
  4. Utilice el método std::size para calcular el tamaño del array
Cómo encontrar el tamaño del array en C++

Este artículo introducirá cómo obtener el tamaño de la array usando diferentes métodos de C++.

Usar el operador sizeof para calcular el tamaño del array de estilo C en C++

Primero, veamos qué pasa cuando intentamos encontrar el tamaño de los conjuntos de estilo C. Para este ejemplo, definimos una variable c_array y la inicializamos con 10 valores enteros. Para calcular el tamaño de esta array, usamos el operador unario sizeof, que devuelve el tamaño del objeto en bytes. Básicamente, dividimos el número de bytes que se necesitan para almacenar el objeto c_array con el tamaño de su elemento único 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;
}

Resultado:

array size : 10

Como puedes ver, la salida parece correcta. Ahora intentemos definir una función separada que haga lo mismo para nosotros:

#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;
}

Resultado:

array size : 2

Tenemos el número equivocado. Usar el operador sizeof no es un método fiable para resolver este problema. Para que el operador sizeof trabaje correctamente, el array no debe ser recibido como un parámetro de la función y no debe ser asignado dinámicamente (en el Heap). Para identificar el uso incorrecto del sizeof, los IDEs normalmente hilvanarán las secciones de código propensas a errores, pero también puede especificar banderas de compilador para las advertencias que se mostrarán durante la compilación (por ejemplo, -Wsizeof-pointer-div o -Wall junto con gcc).

No hay una forma universal de calcular el tamaño de los arrays de estilo C sin preocuparse por muchos casos de bordes, y por eso existe la clase std::vector.

Usa el contenedor std::array para almacenar los datos del array y calcular su tamaño

Antes de entrar en el uso de std::vector, debemos mencionar std::array, que se puede utilizar para almacenar matrices de tamaño fijo. Se beneficia de ser eficiente en cuanto a recursos y tiene un método incorporado para recuperar el tamaño llamado 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;
}

Utilice el contenedor std::vector para almacenar los datos del array y calcular su tamaño

El contenedor std::vector puede ser usado para almacenar arrays dinámicos, y ofrece múltiples métodos para diferentes operaciones, incluyendo sizeof().

#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;
}

Utilice el método std::size para calcular el tamaño del array

El método std::size es parte de la biblioteca <iterator> y puede operar con datos de std::array y con el número de elementos que devuelve 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;
}
Autor: 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

Artículo relacionado - C++ Array