为啥 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&lt;unsigned char&gt;::max_size 很可能与 std::numeric_limits&lt;unsigned int&gt;::max() 相同,当转换为带符号的 int 时当然是 -1。

【讨论】:

以上是关于为啥 std::vector max_size() 函数会返回 -1?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 std::vector 没有 append 方法? [关闭]

为啥 std::vector::data() 中没有使用指针 typedef?

为啥使用 std::vector 而不是 realloc? [关闭]

为啥 std::vector<bool> 没有 .data()?

为啥在 C++11 中更改了 std::vector::resize 签名?

为啥 std::vector::resize(n, src) 按值传递?