Para obtener la cantidad de memoria utilizada por la cadena, debe sumar el capacity()
con la sobrecarga utilizada para la administración. Tenga en cuenta que es capacity()
y no size()
. La capacidad determina la cantidad de caracteres (charT
) asignados, mientras que size()
le informa cuántos de ellos están realmente en uso.
En particular, std::string
implementaciones no suele shrink_to_fit * * el contenido, por lo que si se crea una cadena y luego quitar elementos del final, el size()
se decrementa, pero en la mayoría de los casos (esto se define la aplicación) capacity()
no lo hará
Algunas implementaciones pueden no asignar la cantidad exacta de memoria requerida, sino más bien obtener bloques de tamaños determinados para reducir la fragmentación de la memoria. En una implementación que usó la potencia de dos bloques de tamaño para las cadenas, una cadena con el tamaño 17
podría estar asignando hasta 32
caracteres.
¿Es válido decir que std :: string es lo mismo que una matriz de caracteres? ¿O hay diferencias importantes? – rzetterberg
Sí, char array es exactamente lo que 'std :: string' es. Existen algunas diferencias de implementación entre 'std :: string' y' std :: vector ', pero los datos que están almacenando son los mismos. –
solo quiero señalar que el motivo 'std :: string :: size()' no incluye el caracter 'NULL' es seguir la convención establecida por' strlen' que tampoco lo incluye. Las implementaciones reales de 'std :: string' requieren el * almacenamiento * para la terminación' NULL', para implementar el método 'string :: c_str()' con una sobrecarga mínima. Tal vez [esta pregunta] (http://stackoverflow.com/q/4653745) explica mejor que yo. – rwong