'size_t'vs'container :: size_type'

size_tcontainer::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]stringstd::[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。