gpt4 book ai didi

c++ - STL 容器类 : array

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:28:06 26 4
gpt4 key购买 nike

我只是在探索 C++ 中的 STL 容器。有一些问题...有两个成员函数 max_size() 和 size()。他们似乎在做同样的事情。我最初认为 max_size() 是数组的实际大小,而 size() 是显式存储的元素数。但是当我测试它时,情况并非如此。那为什么会有两个不同的功能呢?

有什么地方可以像Java一样阅读容器的设计规范(不是功能描述)?我似乎有很多问题,例如为什么 std::array 大小是固定的,但不能像 std::vector 那样动态更改等。显然,这样的设计决策必须有一个或另一个原因。阅读此类设计规范以了解此类限制会很有用。我有一个不包括 std::array 的旧“有效 STL”。我相信 Scott meyers 尚未在其中包含 std::array。

最佳答案

按照标准规定,max_size() 是容器可能存储的最大元素数:

distance(begin(), end()) for the largest possible container

(C++11,[container.requirements.general],表 96)

对于固定大小的容器array,它与size()一致,而对于动态容器则完全不同,如std: :vector(它将返回类似于虚拟地址空间大小除以元素大小的值)。

你可以在 C++ 标准中找到容器的所有规范(这是相当昂贵的,但它的草案可以在线免费获得),尽管它只是一个规范规范,往往不能很好地解释某些决定背后的基本原理(和在容器的实现上故意含糊其辞。

不过,对于std::arraystd::vector的区别,是因为std::array是为了存储不求助于堆的元素,提供与本地 C 样式数组相同性能的替代方案,而 std::vector 使用堆来存储元素,这提供了更大的灵 active ,但成本。参见 this answer of mine std::arraystd::vector 之间的更详细比较。

关于c++ - STL 容器类 : array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9746621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com