'size_t'vs'container :: size_type'

时间:2009-05-27 23:56:57

标签: c++ containers size-type

size_tcontainer::size_type之间是否存在差异?

据我所知,size_t更通用,可用于任何size_type

container::size_type是否针对特定种类的容器进行了优化?

3 个答案:

答案 0 :(得分:96)

标准容器将size_type定义为Allocator::size_type的类型定义(分配器是模板参数),std::allocator<T>::size_type 通常定义为{{ 1}}(或兼容的类型)。所以对于标准情况,它们是相同的。

但是,如果使用自定义分配器,则可以使用不同的基础类型。因此,size_t最适用于通用性。

答案 1 :(得分:36)

  • size_t被定义为用于对象大小的类型,并且依赖于平台
  • container::size_type是用于容器中元素数量的类型,取决于容器

所有std个容器都使用size_t作为size_type,但每个独立的库供应商都会选择一个适合其容器的类型。

如果查看,您会发现Qt容器的size_type与版本有关。在Qt3中,它是unsigned int,在Qt4中,它已更改为int

答案 2 :(得分:8)

对于std::[w]stringstd::[w]string::size_type等于std::allocator<T>::size_type,等于std::size_t。对于其他容器,它是一些实现定义的无符号整数类型。

有时拥有确切的类型是有用的,所以例如一个人知道类型所在的位置(比如UINT_MAX),以便人们可以利用它。或者对于模板,您确实需要将两个相同的类型传递给函数/类模板。

我常常发现我使用size_t来表示简洁或迭代。在通用代码中,由于您通常不知道使用模板的容器实例以及容器的大小,如果需要存储容器大小,则必须使用Container::size_type typedef。