'размер t 'vs' контейнер:: тип размера'
есть ли разница между size_t и container::size_type?
Я понимаю size_t более универсален и может быть использован для любого size_type s.
но container::size_type оптимизирован для конкретных типов контейнеров?
3 ответа:
стандартные контейнеры определяют
size_typeКак typedef, чтобыAllocator::size_type(распределитель является параметром шаблона), который дляstd::allocator<T>::size_typeи обычно определена вsize_t(или совместимый тип). Так что для стандартного случая они одинаковы.однако при использовании пользовательского распределителя может использоваться другой базовый тип. Так что
container::size_typeпредпочтительно для максимальной общности.
size_tопределяется как тип, используемый для размера объекта и является зависит от платформы.container::size_type- Это тип, который используется для количества элементов в контейнере и зависит от контейнера.все
stdиспользовать контейнерыsize_tКакsize_type, но каждый независимый поставщик библиотеки выбирает тип, который он находит подходящим для своего контейнера.если вы посмотрите на qt, вы найдете, что
size_typeконтейнеров Qt зависит от версии. В Qt3 это былоunsigned intи в Qt4 он был изменен наint.
на
std::[w]string,std::[w]string::size_typeравнаstd::allocator<T>::size_type, что равноstd::size_t. Для других контейнеров это некоторая реализация, определенная беззнаковым целочисленным типом.иногда полезно иметь точный тип, поэтому, например, известно, где тип обертывается (например, to
UINT_MAX) так что можно воспользоваться этим. Или для шаблонов, где вам действительно нужно передать два одинаковых типа шаблонов функций/классов.часто я нахожу, что я использую
size_tдля краткости или итераторы в любом случае. В общем коде, поскольку вы обычно не знаете, с каким экземпляром контейнера используется ваш шаблон и какой размер имеют эти контейнеры, вам придется использоватьContainer::size_typetypedef если вам нужно хранить размер контейнеров.