'size_t'vs'container :: size_type'
size_t
和container::size_type
是否有区别?
我所理解的是size_t
更通用,可用于任何size_type
s。
但是container::size_type
针对特定types的容器进行优化的吗?
标准容器将size_type
定义为Allocator::size_type
(Allocator是模板参数)的typedef, std::allocator
通常定义为size_t
(或兼容types)。 所以对于标准的情况,他们是一样的。
但是,如果使用自定义分配器,则可以使用不同的基础types。 所以container::size_type
是最好的最大的一般性。
-
size_t
被定义为用于对象大小的types,并且依赖于平台 。 -
container::size_type
是用于容器中元素数目的types,并且是依赖于容器的 。
所有std
容器都使用size_t
作为size_type
,但是每个独立的库供应商都会select一个适合其容器的types。
如果你看看qt ,你会发现Qt容器的size_type
是依赖于版本的。 在Qt3中,它是unsigned int
,在Qt4中它被改为int
。
对于std::[w]string
, std::[w]string::size_type
等于std::allocator<T>::size_type
,它等于std::size_t
。 对于其他容器,它是一些实现定义的无符号整数types。
有时确实的types是有用的,例如,一个人知道types的位置(比如UINT_MAX
),这样就可以使用这个types。 或者对于模板,你真的需要将两个相同的types传递给函数/类模板。
通常我发现我使用size_t
为简洁或迭代器无论如何。 在generics代码中,由于您通常不知道使用哪个容器实例以及容器的大小,因此如果需要存储容器大小,则必须使用Container::size_type
typedef。