HOWTO · C++

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

Este artículo demuestra cómo encontrar la longitud de un conjunto

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