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_t
se define como el tipo utilizado para el tamaño de un objeto y depende de la plataforma . -
container::size_type
es 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
.