【问题标题】:Example where std::array::max_size and std::array::size gives different resultstd::array::max_size 和 std::array::size 给出不同结果的示例
【发布时间】:2018-06-29 01:16:56
【问题描述】:

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

【问题讨论】:

标签: c++ arrays stl stdarray


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这两个函数将始终返回相同的值,即N 对应std::array<T, N>

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

    【讨论】:

    • 我会说“与其他容器的一致性”不是正确的描述。不幸的是,所有答案都以一种或另一种方式表示
    • @Slava 这不是一个恰当的描述吗?我认为在此处删除“容器概念”一词没有任何价值。
    • 有某些容器必须遵循的正式规范(我希望当他们最终将概念添加到语言中时将在该级别指定),是的,我认为将其描述为“与其他的一致性”是不合适。
    【解决方案3】:

    std::array::max_size() 返回数组希望包含的最大元素数。数组的大小是编译时常量,也是其类型的一部分。它只能准确地容纳该数量的元素。对于std::array,它包含的元素数量和它可以包含的元素数量是一样的。

    该特定功能并没有给std::array 增加太多,但它的存在是为了与其他可以存储可变数量元素的容器兼容。考虑函数模板需要某种容器类型作为参数的情况。您可能想知道该容器的最大存储容量,而不是 std::array 或其他容器。

    【讨论】:

      【解决方案4】:

      没有这样的例子,因为数组是固定大小的容器。它们当前的大小与最大大小相同,因为它们不能增长或缩小。

      max_size() 存在的根本原因是让您以一种可与 C++ 标准库中的其他容器互换的方式使用 std::array

      当你的程序知道容器的类型是std::array时,没有理由在上下文中使用max_size()

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2021-11-16
          • 2016-05-23
          • 2020-03-22
          • 2021-03-19
          • 2020-07-05
          • 1970-01-01
          • 2015-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多