'размер 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_type
typedef если вам нужно хранить размер контейнеров.