Tengo una estructura de datos vector<set<char> >
(base de datos de transacciones) y quiero saber el tamaño de la misma. Cuando uso sizeof() con cada set<char>
el tamaño es 24 a pesar de que el conjunto contiene 3, 4 o 5 caracteres. Más tarde, cuando uso sizeof() con el vector<set<char> >
el tamaño es 12 ... supongo que esta no es la forma de conocer el tamaño de una estructura de datos. ¿Alguna ayuda? Gracias.sizeof() un vector
Respuesta
Quiere vector::size()
y set::size()
.
Suponiendo v
es su vector, hacer esto:
size_t size = 0;
for (vector<set<char> >::const_iterator cit = v.begin(); cit != v.end(); ++cit) {
size += cit->size();
}
sizeof()
le está dando el tamaño en memoria del objeto/tipo que se aplica, en múltiplos de sizeof(char)
(normalmente un byte). Si desea saber el tamaño en memoria del contenedor y sus elementos, se puede hacer esto:
sizeof(v) + sizeof(T) * v.capacity(); // where T is the element type
¿Qué pasa si ya ha reservado su vector? –
@John: ¿Qué pasa si él * tiene *? 'reserve()' no tiene * nada * que ver con 'size()'. –
Creo que John quiere decir que si quiere tener alguna idea de cuánta memoria ocupa el vector (y el contenido), debería estar mirando la capacidad, no el tamaño. "tamaño en memoria del contenedor y sus elementos" es, por supuesto, ambiguo, pero sospecho que es más probable que se entienda que se relaciona con la cantidad de memoria asignada por el vector, en lugar de la cantidad de memoria que actualmente ocupan los elementos. –
sizeof()
se calcula en tiempo de compilación, así que no hay forma en que se le puede decir cuántos elementos tiene adentro
Utilice el método size()
del objeto vector.
sizeof
devuelve el tamaño del objeto en sí. si contiene un puntero a una matriz, por ejemplo, no contará el tamaño de la matriz, solo contará el tamaño del puntero (4 en 32 bits) para el uso del vector .size
Utilice vector::size()
para determinar el número de elementos en el vector . Sugerencia: se asignan en la tienda gratuita.
Vector se implementa utilizando punteros internos para el almacenamiento real. Por lo tanto, sizeof() siempre devolverá el mismo resultado que no incluye el almacenamiento de datos en sí. Pruebe usar el método vector::size()
en su lugar. Esto devolverá la cantidad de elementos en el vector.
vector
en STL es una plantilla de clase, cuando se le da parámetro de plantilla dentro de <SomeType>
siguiente vector, compilador C++ código generado para una clase de tipo SomeType. Por lo tanto, cuando rellene el vector utilizando push_back
, en realidad está insertando otro objeto de SomeType
de modo que cuando solicite .size()
desde el compilador, le proporcione el número de objetos SomeType
insertados por usted.
Espero que ayude!
Bueno, esa es una respuesta de alrededor del establo ... ¿Quién dijo que está usando 'push_back' y cómo es eso relevante? ¿Cómo es relevante el hecho de que el vector es una plantilla? Pero al menos tienes el punto de que 'size()' es lo que el OP está buscando. –
@STingRaySC Estaba tratando de explicar a OP que sizeof no tiene nada que ver con lo que él/ella quería. Es el método .size() que él (él/ella) debería estar buscando. –
- 1. sizeof() std :: vector (C++)
- 2. sizeof (int) == sizeof (void *)?
- 3. ¿Por qué sizeof (int) es diferente de sizeof (int *)?
- 4. sizeof para un nulo terminado const char *
- 5. ¿Cuál es el tamaño de (main), sizeof (printf), sizeof (scanf)?
- 6. sizeof plantilla variadic (suma de sizeof de todos los elementos)
- 7. sizeof a struct member
- 8. operador sizeof() en C
- 9. cadena literal Sizeof
- 10. sizeof (int) en x64?
- 11. C2070 - operando sizeof ilegal
- 12. sizeof array clarification
- 13. C# sizeof decimal?
- 14. sizeof java object
- 15. Sizeof struct in Go
- 16. implementar su propio sizeof
- 17. C++ ampliar un vector con otro vector
- 18. C char * sizeof gama
- 19. Sizeof vs STRLEN
- 20. Sizeof Puntero al array
- 21. uso de operador sizeof
- 22. C++ sizeof con bool
- 23. ¿Está definido sizeof (bool)?
- 24. ¿Cómo funciona sizeof (Array)
- 25. ¿Qué hace sizeof?
- 26. Inicializando un vector de std :: cadena con una matriz
- 27. sizeof() estructuras desconocidas. ¿Por qué?
- 28. ¿Por qué sizeof (void) == 1?
- 29. C sizeof una matriz pasada
- 30. Obtener sizeof (tipo) en Windbg
sizeof() es un operador de tiempo de compilación –