Для std::[w]string
, std::[w]string::size_type
равно std::allocator<T>::size_type
, что равно std::size_t
. Для других контейнеров это некоторая реализация, определенная целочисленным типом без знака.
Иногда бывает полезно иметь точный тип, так что, например, известно, куда этот тип подходит (например, UINT_MAX
), чтобы его можно было использовать. Или для шаблонов, где вам действительно нужно передать два идентичных типа в шаблоны функций / классов.
Часто я нахожу, что все равно использую size_t
для краткости или итераторов. В общем коде, поскольку вы обычно не знаете, с каким экземпляром контейнера используется ваш шаблон и какого размера эти контейнеры, вам придется использовать typedef Container::size_type
, если вам нужно сохранить размер контейнеров.