std::array::max_size和std::array::size返回不同结果的示例

12
每当我尝试使用std::arraymax_size()size()函数时,我得到相同的结果,我想知道是否存在一种情况,两者给出不同的结果。

4
因为每个 std::array<T, N> 都是一个固定大小的容器,max_size 返回的值等于 N(这也是 size 返回的值)。 - Jarod42
5个回答

15

该函数存在是为了与其他容器(如std::vector)兼容。对于std::array,这两个值将始终相同。


7

这两个函数总是返回相同的值,即对于一个 std::array<T, N>,返回N

它们是为了与其他容器保持一致而提供的,对于其他容器,这些值将不同(例如 std::vector)。


1
我认为“与其他容器的一致性”不是恰当的描述。不幸的是,所有答案都或多或少地表达了这一点。 - Slava
@Slava 这不是一个合适的描述吗?我不认为在这里省略“容器概念”这个短语有任何价值。 - Baum mit Augen
1
有正式的规范(我希望当他们最终将概念添加到语言时,它们将在那个级别上进行规定),某些容器必须遵循这些规范,是的,我认为将其描述为“与其他一致”是不恰当的。 - Slava

4
由于数组是固定大小的容器,所以没有这样的例子。它们当前的大小与它们的最大大小相同,因为它们不能增长或缩小。
`max_size()` 的存在是为了让您使用 `std::array` 以一种可与 C++ 标准库中其他容器互换的方式。
在程序知道容器类型为 `std::array` 的情况下,没有必要在上下文中使用 `max_size()`。

2
`std::array::max_size()`函数返回数组可以包含的最大元素数量。数组的大小是编译时常量,并且是其类型的一部分。它只能包含确切数量的元素。对于`std::array`,它包含的元素数量和它可能包含的元素数量是相同的。
那个特定的函数在`std::array`中没有太多作用,但它存在是为了与其他可以存储可变数量元素的容器兼容。考虑一个函数模板期望某种容器类型作为参数的情况。您可能会对知道该容器的最大存储容量感兴趣,而不管它是`std::array`还是另一个容器。

2
对于 std::array,两个函数在文档中都是相等的,如文档所述。尽管存在重复,std::array::max_size() 存在是因为 std::array 必须满足 Container 概念,该概念需要此方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接