c++ - que - ''size_t'' frente a ''container:: size_type''
size c++ para que sirve (3)
Los contenedores estándar definen size_type como typedef a Allocator::size_type (Allocator es un parámetro de plantilla), que para std::allocator<T>::size_type se define típicamente como 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. Entonces container::size_type es preferible para la máxima generalidad.
¿Hay una diferencia entre size_t y container::size_type ?
Lo que entiendo es que size_t es más genérico y se puede usar para cualquier size_type .
Pero, ¿ container::size_type optimizado para tipos específicos de contenedores?
Para std::[w]string , std::[w]string::size_type es igual a std::allocator<T>::size_type , que es igual a std::size_t . Para otros contenedores, es una implementación definida tipo entero sin signo.
A veces es útil tener el tipo exacto, así que, por ejemplo, uno sabe dónde se ajusta el tipo (como, a UINT_MAX ) para que uno pueda hacer uso de eso. O para plantillas, donde realmente necesita pasar dos tipos idénticos a plantillas de función / clase.
A menudo me parece que uso size_t para la brevedad o iteradores de todos modos. En el código genérico, dado que generalmente no se sabe con qué instancia de contenedor se utiliza su plantilla y qué tamaño tienen esos contenedores, tendrá que usar el tipo de Container::size_type typedef si necesita almacenar el tamaño de los contenedores.
-
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 usa para la cantidad de elementos en el contenedor y depende del contenedor .
Todos los contenedores size_type usan size_t como size_type , pero cada proveedor de biblioteca independiente elige un tipo que considere apropiado para su contenedor.
Si miras qt , verás que size_type de los contenedores Qt depende de la versión. En Qt3 no tenía unsigned int y en Qt4 se cambió a int .