size_t
和container::size_type
之间有区别吗?
我的理解是,size_t
更通用,可以用于任何size_type
。
但是,container::size_type
是否针对特定类型的容器进行了优化?
size_t
和container::size_type
之间有区别吗?
我的理解是,size_t
更通用,可以用于任何size_type
。
但是,container::size_type
是否针对特定类型的容器进行了优化?
标准容器将size_type
定义为对Allocator::size_type
(Allocator是一个模板参数)的typedef,对于std::allocator<T>::size_type
来说,通常定义为size_t
(或兼容类型)。因此,在标准情况下,它们是相同的。
然而,如果您使用自定义分配器,可能会使用不同的底层类型。因此,container::size_type
更适用于最大的一般性。
size_t
定义了用于对象大小的类型,是与平台相关的。container::size_type
是用于表示容器元素数量的类型,并且是与容器相关的。所有的std
容器都使用size_t
作为size_type
,但每个独立的库供应商都会选择适合其容器的类型。
如果你查看qt,你会发现Qt容器的size_type
与版本相关。在Qt3中,它是unsigned int
,而在Qt4中则改为了int
。
int
而不是 ssize_t
,int
有点小。 - Steve Jessopstd::[w]string
,std::[w]string::size_type
等于std::allocator<T>::size_type
,也等于std::size_t
。对于其他容器而言,其大小是一些实现定义的无符号整型。UINT_MAX
),以便可以利用它。或者对于模板,人们真的需要将两个相同的类型传递给函数/类模板。size_t
。在通用代码中,由于你通常不知道你的模板将与哪个容器实例一起使用以及这些容器的大小,因此如果需要存储容器的大小,则必须使用Container::size_type
typedef。
N1804
的草案标准,但我没有看到Allocator::size_type
和size_type
之间的任何关系。快速浏览libstdc++也没有发现类似的情况。 - Shafik Yaghmoursize_t
是实现这些约束的最佳实践。然而,在C++11中,它现在基本上被定义为:std::make_unsigned<X::difference_type>::type
默认情况下。在实践中,这可能与size_t
相同或兼容。 - Evan Teransize_type
被弃用的提示。这是怎么回事? - Marc.2377