c++ - saber - Error de compilación de función de miembro de tamaño de matriz
como saber el tamaño de un arreglo en java (3)
Trabajando con este código:
int myArray[10];
for(int i = 0; i < myArray.size(); i++)
cout << myArray[i] << endl;
Error del compilador:
error: solicitud de miembro ''tamaño'' en ''myArray'', que es de tipo no de clase ''int [10]'' |
Debo estar perdiendo algo obvio, pero no lo veo.
Desea el operador sizeof
:
int myArray[10];
for(int i = 0; i < (sizeof(myArray)/sizeof(myArray[0])); i++)
cout << myArray[i] << endl;
El tamaño no está definido para arreglos estáticos en C ++. Si tiene que usar una matriz estática, necesita realizar un seguimiento de la longitud de la matriz en otras variables.
Me gusta:
const int size = 10;
int arr[size];
for(int i = 0; i < size; i++){
cout << myArray[i] << endl;
}
Por otro lado, si no es un requisito utilizar matrices estáticas, le recomendaría usar std :: vector en su lugar.
std::vector<int> arr;
for (int i = 0, max = arr.size(); i<max;i++){
[...]
}
Los tipos de matriz no son tipos de clase y no tienen funciones de miembro. Entonces una matriz no tiene una función miembro llamada size
. Sin embargo, dado que las matrices tienen tamaños fijos en tiempo de compilación, usted sabe que el tamaño es 10
:
for(int i = 0; i < 10; i++)
cout << myArray[i] << endl;
Por supuesto, es mejor evitar los números mágicos y poner el tamaño en una constante definida en alguna parte. Alternativamente, hay una función de biblioteca estándar para determinar la longitud de un objeto de tipo de matriz:
for(int i = 0; i < std::extent(myArray); i++)
cout << myArray[i] << endl;
Sin embargo, puede usar std::array
lugar, que encapsula un objeto tipo array para usted y proporciona una función miembro de size
:
std::array<int, 10> myArray;
for(int i = 0; i < myArray.size(); i++)
cout << myArray[i] << endl;