Cha*_*unt 100 c++ size-type container-data-type
是否有之间的差异size_t
和container::size_type
?
我所理解的size_t
是更通用的,可以用于任何size_type
s.
但是container::size_type
针对特定种类的容器进行了优化?
Eva*_*ran 100
标准容器限定size_type
为一个typedef到Allocator::size_type
(分配器是模板参数),其为std::allocator<T>::size_type
被典型地定义为size_t
(或兼容的类型).所以对于标准情况,它们是相同的.
但是,如果使用自定义分配器,则可以使用不同的基础类型.所以container::size_type
最好是最大限度的通用性.
Tim*_*imW 39
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
.对于其他容器,它是一些实现定义的无符号整数类型.
有时拥有确切的类型是有用的,所以例如,人们知道类型包含在哪里(比如,到UINT_MAX
),以便人们可以利用它.或者对于模板,您确实需要将两个相同的类型传递给函数/类模板.
我经常发现我用的size_t
是简洁或迭代器.在通用代码中,由于您通常不知道使用模板的容器实例以及容器具有的大小,因此Container::size_type
如果需要存储容器大小,则必须使用typedef.