En C# utilizo la propiedad Length incrustada en la matriz de la que me gustaría obtener el tamaño. ¿Cómo hacer eso en C++?¿Cómo obtener el tamaño de una matriz?
Respuesta
Las matrices en C/C++ no almacenan sus longitudes en la memoria, por lo que es imposible encontrar su tamaño simplemente dando un puntero a una matriz. Cualquier código que use matrices en esos idiomas depende de un tamaño constante conocido, o de una variable separada que se transmite y que especifica su tamaño.
Una solución común a esto, si presenta un problema, es usar la clase std::vector
de la biblioteca estándar, que es mucho más parecida a una matriz administrada (C#), es decir, almacena su longitud y además tiene algunos útiles funciones miembro (para búsqueda y manipulación).
Usando std::vector
, simplemente puede llamar al vector.size()
para obtener su tamaño/longitud.
¿Es imposible obtener el tamaño? –
@John: Sí, es imposible, tengo miedo. Ver mi respuesta actualizada. std :: vector puede ser su mejor opción. – Noldorin
Esa es mi pregunta, ¿cómo obtener el tamaño de std :: vector? Es como una matriz. Lo siento por malentendidos, soy nuevo en C++. –
En C/C++, las matrices son simplemente punteros al primer elemento de la matriz, por lo que no hay forma de realizar un seguimiento del tamaño o el número de elementos. Deberá pasar un número entero que indique el tamaño de la matriz si necesita usarla.
Strings pueden han su longitud determinada, asumiendo que se terminan null, mediante el uso de la función strlen(), pero que simplemente cuenta hasta que el carácter \ 0.
-1 Las matrices no son punteros. – rightfold
Als Nolrodin señaló anteriormente, es casi imposible obtener el tamaño de una matriz simple en C++ si solo tiene un puntero a su primer elemento. Sin embargo, si usted tiene una matriz de tamaño fijo no es un conocido truco C para calcular el número de elementos de la matriz en tiempo de compilación, es decir haciendo:
GrmblFx loadsOfElements[1027];
GrmblFx_length = sizeof(loadsOfElements)/sizeof(GrmblFx);
Realmente depende de lo que quiere decir por "matriz". Las matrices en C++ tendrán un tamaño (es decir, el tamaño de byte "en bruto" ahora) que equivale a N veces el tamaño de un elemento. Por eso uno puede obtener fácilmente el número de elementos usando el operador sizeof
. Pero esto requiere que todavía tenga acceso al tipo de esa matriz. Una vez que lo transfiere a las funciones, se convertirá en punteros y luego se perderá. No se puede determinar ningún tamaño más. Deberá construir de otra manera que dependa del valor de los elementos para calcular el tamaño.
Éstos son algunos ejemplos:
int a[5];
size_t size = (sizeof a/sizeof a[0]); // size == 5
int *pa = a;
Si ahora perdemos el nombre "a" (y por lo tanto su tipo), por ejemplo pasando "pa" a una función que sólo esa función tiene entonces el valor de ese puntero, entonces no tenemos suerte. Entonces no podemos recibir el tamaño más. Tendríamos que pasar el tamaño junto con el puntero a esa función.
Las mismas restricciones se aplican cuando obtenemos una matriz usando new
. Devuelve un puntero que apunta a los elementos de esa matriz y, por lo tanto, se perderá el tamaño.
int *p = new int[5];
// can't get the size of the array p points to.
delete[] p;
No puede devolver un puntero que tiene el tipo de la matriz incorporada, debido a que el tamaño de la matriz creada con new
se puede calcular en tiempo de ejecución. Pero los tipos en C++ se deben establecer en tiempo de compilación. Por lo tanto, new
borra esa parte de la matriz y en su lugar devuelve un puntero a los elementos. Tenga en cuenta que no necesita meterse con new
en C++. Puede usar la plantilla std::vector
, según lo recomendado por otra respuesta.
¿Alguien mencionó '' 'std :: extent''' todavía? – ManuelAtWork
para contar el número de elementos en una matriz estática, puede crear una función de plantilla:
template < typename T, size_t N >
size_t countof(T const (&array)[ N ])
{
return N;
}
Para contenedores estándar, tales como std::vector
, la función de size()
se utiliza. Este patrón también se usa con boost arrays, que son matrices de tamaño fijo y no reclaman un rendimiento peor para las matrices estáticas. El código que tiene en un comentario anterior debería ser:
for (std::vector::size_type i(0); i < entries.size(); ++i)
(suponiendo que los cambios de tamaño en el bucle, de lo contrario izarla,) en lugar de tratar tamaño que una variable miembro.
¿Por qué funciona esto? – Zingam
@Zingam la plantilla? porque una referencia a una matriz conserva el tipo de la matriz, incluido el tamaño, a diferencia de un parámetro que no es de referencia y que se degrada a un puntero. –
¡Gracias! No entiendo la mitad de la plantilla, pero todavía no puedo entender por qué funciona esta afirmación: T const (& array) [N] Los tutoriales sobre las plantillas que estoy leyendo no me dan ninguna pista. – Zingam
- 1. Obtener el tamaño de una matriz
- 2. Rubí obtener el tamaño en bytes de una matriz
- 3. ¿Cómo obtener confiablemente el tamaño de la matriz C-style?
- 4. Obtenga el tamaño de una matriz 2D
- 5. Cambiar el tamaño de una matriz
- 6. Cambiar el tamaño de una matriz 3D
- 7. ¿Cómo acceder/obtener el tamaño de una matriz/colección en plantillas de velocidad?
- 8. Usar el tamaño de una matriz en otra matriz
- 9. tamaño Cálculo de una matriz
- 10. ¿Cómo puedo encontrar el tamaño de una matriz 2D?
- 11. ¿Cómo sabe eliminar [] el tamaño de una matriz?
- 12. Cómo encontrar el tamaño de una matriz en postgresql
- 13. ¿Cómo cambio el tamaño de una matriz en MATLAB?
- 14. ¿Cómo puedo cambiar el tamaño de una matriz en C?
- 15. ¿Cómo obtener una matriz de valores de una matriz asociativa?
- 16. ¿Cómo obtener el tamaño rect de UITableViewCell?
- 17. cómo obtener el tamaño de td
- 18. Cómo obtener el tamaño de un NSString
- 19. ¿Cómo obtener el tamaño visible de una actividad?
- 20. Cómo obtener el tamaño de una clave RSA en Java
- 21. ¿Cómo obtener el tamaño original de una imagen -Jquery
- 22. Obtener tamaño de imagen real, después de cambiar el tamaño
- 23. Cómo obtener el tamaño de archivo
- 24. ¿Cómo obtener el tamaño real de JPanel?
- 25. ¿Cómo obtener una columna de una matriz java 2D?
- 26. cómo encontrar el tamaño de la matriz 2d en C++
- 27. Cómo obtener el tamaño de una imagen que se mantiene en una matriz de bytes en KB
- 28. Cambiar el tamaño de una matriz con C
- 29. ¿Puedo limitar el tamaño de una matriz en Scala?
- 30. Obtener el tamaño de ZipInputStream
Considere 'std :: array' – OMGtechy