¿Hay alguna diferencia entre size_ty container::size_type?
Lo que entiendo es que size_tes más genérico y se puede usar para cualquier size_types.
¿Pero está container::size_typeoptimizado para tipos específicos de contenedores?
¿Hay alguna diferencia entre size_ty container::size_type?
Lo que entiendo es que size_tes más genérico y se puede usar para cualquier size_types.
¿Pero está container::size_typeoptimizado para tipos específicos de contenedores?
Respuestas:
Los contenedores estándar definen size_typecomo un typedef a Allocator::size_type(Asignador es un parámetro de plantilla), que para std::allocator<T>::size_typeestá típicamente define para ser size_t(o un tipo compatible). Entonces, para el caso estándar, son lo mismo.
Sin embargo, si usa un asignador personalizado, se podría usar un tipo subyacente diferente. Por eso container::size_typees preferible para la máxima generalidad.
size_tfue la apuesta práctica la implementación de esas limitaciones. Sin embargo, en C ++ 11, ahora se define esencialmente como: std::make_unsigned<X::difference_type>::typepor defecto. Lo que en la práctica, probablemente será el mismo o compatible con size_t.
size_typedesaprobación. ¿Lo que da?
size_tse define como el tipo utilizado para el tamaño de un objeto y depende de la plataforma .container::size_typees el tipo que se utiliza para el número de elementos del contenedor y depende del contenedor .Todos los stdcontenedores utilizan size_tcomo el size_type, pero cada proveedor de biblioteca independiente elige un tipo que considera apropiado para su contenedor.
Si miras qt, encontrará que los size_typecontenedores de Qt dependen de la versión. En Qt3 lo fue unsigned inty en Qt4 se cambió a int.
intlugar de ssize_t, intalgo pequeño.
Porque std::[w]string, std::[w]string::size_typees igual a std::allocator<T>::size_type, que es igual a std::size_t. Para otros contenedores, es algún tipo de entero sin signo definido por la implementación.
A veces es útil tener el tipo exacto, así que, por ejemplo, uno sabe dónde se envuelve el tipo (me gusta, a UINT_MAX) para poder hacer uso de eso. O para plantillas, donde realmente necesita pasar dos tipos idénticos a plantillas de función / clase.
A menudo encuentro que uso size_tpor brevedad o iteradores de todos modos. En código genérico, dado que generalmente no sabe con qué instancia de contenedor se usa su plantilla y qué tamaño tienen esos contenedores, tendrá que usar Container::size_typetypedef si necesita almacenar el tamaño de los contenedores.
N1804y no veo ninguna relación entreAllocator::size_typeysize_type. Un vistazo rápido a libstdc ++ tampoco muestra nada similar a esto.