为什么std :: vector max_size()函数返回-1?

时间:2009-10-23 17:26:04

标签: c++ stl vector

我有std::vector<unsigned char> m_vData;

m_vData.max_size()始终返回-1。为什么会这样?

3 个答案:

答案 0 :(得分:18)

可能是因为您在查看之前将其分配给签名类型。 max_size的返回值通常为size_t,这是一种无符号类型。在许多平台上直接转换为int将返回-1。

请尝试以下

std::vector<unsigned char>::size_type v1 = myVector.max_size();

答案 1 :(得分:7)

请注意,max_size()会返回一个未签名的vector::size_type,因此您会看到一个负数,因为将其转换为某个位置(您实际上正在获得一个非常大的无符号数)。

实现是说它可以处理具有那么多元素的向量(虽然我怀疑你实际上已经分配了一个元素)。

这不是向量中的元素数量(或者当前为向量保留的)。您可以使用vector::size()vector::capacity()获取这些数字。

答案 2 :(得分:4)

请注意,在大多数平台上,std::vector<unsigned char>::max_size很可能与std::numeric_limits<unsigned int>::max()相同,当转换为有符号的int时,它当然是-1。