为啥 std::vector max_size() 函数会返回 -1?
Posted
技术标签:
【中文标题】为啥 std::vector max_size() 函数会返回 -1?【英文标题】:why would std::vector max_size() function return -1?为什么 std::vector max_size() 函数会返回 -1? 【发布时间】:2009-10-23 17:26:04 【问题描述】:我有一个std::vector<unsigned char> m_vData;
m_vData.max_size()
总是返回 -1。为什么会这样?
【问题讨论】:
如果您将结果分配给错误的数据类型,它将返回各种有趣的东西。该函数返回一个size_t
,它是无符号的。如果您看到 -1,您正在将其转换为另一种类型,然后是的,您可能会丢失或更改数据。 :)
【参考方案1】:
可能是因为您在查看之前将其分配给了签名类型。 max_size 的返回值通常是size_t
,它是一个无符号类型。在许多平台上直接转换为 int 将返回 -1。
改用以下方法
std::vector<unsigned char>::size_type v1 = myVector.max_size();
【讨论】:
【参考方案2】:请注意,max_size()
返回一个无符号的 vector::size_type
,因此您看到的是一个负数,因为它在某处进行了转换(您实际上得到了一个非常大的无符号数)。
实现是说它可以处理具有这么多元素的向量(尽管我怀疑你实际上会分配一个)。
这不是向量中元素的数量(或当前为向量保留的)。您可以通过vector::size()
或vector::capacity()
获得这些号码。
【讨论】:
【参考方案3】:请注意,在大多数平台上,std::vector<unsigned char>::max_size
很可能与 std::numeric_limits<unsigned int>::max()
相同,当转换为带符号的 int 时当然是 -1。
【讨论】:
以上是关于为啥 std::vector max_size() 函数会返回 -1?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 std::vector 没有 append 方法? [关闭]
为啥 std::vector::data() 中没有使用指针 typedef?
为啥使用 std::vector 而不是 realloc? [关闭]
为啥 std::vector<bool> 没有 .data()?