像:
std::string<T>::size_type
std::list<T>::size_type
std::map<T>::size_type
std::vector<T>::size_type
cplusplus.com和cppreference.com都说它们通常是size_t
,但它们是否真正,明确地保证标准为size_t
除非使用自定义分配器?
答案 0 :(得分:7)
对于STL容器 - 不。 [container.requirements.general]中标准的表96列出了任何容器X
的容器需求,非常清楚地说明了这一点:
但是,对于basic_string
,size_type
定义为
typedef typename allocator_traits<Allocator>::size_type size_type;
反过来size_t
为std::allocator<..>
作为分配器。
此外,std::array
根据[array.overview] / 3使用size_t
作为size_type
。
答案 1 :(得分:0)
size_type
不保证为size_t
。
但 default allocator size_type
是,所以默认为size_t
。
从标准20.6.9
template <class T> class allocator {
public:
typedef size_t size_type;
typedef ptrdiff_t difference_type;
....
容器的size_type派生自分配器:
typedef typename allocator_traits<Allocator>::size_type size_type;