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, al UINT_MAX
) para que uno pueda usar eso. O para plantillas, donde realmente necesita pasar dos tipos idénticos a plantillas de función/clase.
A menudo encuentro que utilizo size_t
para abreviar o iteradores de todos modos. En el código genérico, ya que generalmente no sabe con qué instancia de contenedor se utiliza su plantilla y qué tamaño tienen esos contenedores, tendrá que usar el tipo Container::size_type
si necesita almacenar el tamaño de los contenedores.
¿Puedes aclarar esta respuesta? He repasado los borradores de estándares desde 'N1804' y no veo ninguna relación entre' Allocator :: size_type' y 'size_type'. Un rápido vistazo a libstdC++ tampoco muestra nada similar. –
@ShafikYaghmour, por lo que esta respuesta está desactualizada, pero para maximizar la portabilidad, creo que el consejo sigue siendo correcto: C++ 03 especificado "Tabla 32: tamaño_tipo: un tipo que puede representar el tamaño del objeto más grande en el modelo de asignación. " En ese momento, 'size_t' era la implementación práctica de esas restricciones. Sin embargo, en C++ 11, ahora se define esencialmente como: 'std :: make_unsigned :: type' de forma predeterminada. Que en la práctica, probablemente será el mismo o compatible con 'size_t'. –
CUIDADO la respuesta es incorrecta .... ver http: // stackoverflow.com/questions/4849678/c-for-loop-size-type-vs-size-t TL: DR: los asignadores size_type deben ser size_t y en C++ 17 size_type quedarán obsoletos como están. – user3063349