Cómo encontrar el tamaño del array en C++
-
Usar el operador
sizeof
para calcular el tamaño del array de estilo C en C++ -
Usa el contenedor
std::array
para almacenar los datos del array y calcular su tamaño -
Utilice el contenedor
std::vector
para almacenar los datos del array y calcular su tamaño -
Utilice el método
std::size
para calcular el tamaño del array
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;
}
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