为什么在std :: array size_t和std :: vector中的size_type通常是size_t?

wim*_*aan 7 c++ size-t stdvector stdarray

该文档说,size_typestd::vector是/ usually / size_t,这是合理的,因为实现可以选择使用不同的东西。

但是为什么size_type = size_tstd::array。特别是在这里,因为std::array使用很少µC,所以最好使实现具有一定的自由度。

这是文档缺陷吗?

Cal*_*eth 2

它被定义为这种方式,因为size_t它的定义对于所有数组来说都是足够的。如果您想要较小的数组使用较小的类型,您始终可以根据constexpr值在适当的时候缩小范围。

template <typename Array>
struct small_array_size
{
    using type = size_t
};

template <typename T, size_t N, typename = std::enable_if_t<N < 256>>
struct small_array_size<std::array<T, N>>
{
    using type = uint8_t;
};

template <typename T, size_t N, typename = std::enable_if_t<N < 65536>>
struct small_array_size<std::array<T, N>>
{
    using type = uint16_t;
};

template <typename Array>
using small_array_size_t = typename small_array_size<Array>::type;
Run Code Online (Sandbox Code Playgroud)