STL容器类:数组

P.P*_*.P. 1 c++ stl

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

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

Mat*_*lia 5

如标准中所指定的,max_size()是容器可能存储的最大元素数:

distance(begin(), end()) 为最大的容器

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

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

您可以在C++标准中找到容器的所有规格(这是非常昂贵的,但它的草稿可以在线免费获得),虽然它只是一个规范性的规范,往往不能很好地解释一些决策背后的基本原理(并且故意模糊不清)关于容器的实施).

尽管如此,之间的差值std::arraystd::vector,这是因为std::array打算元素存储不诉诸堆,提供相同性能的替代本地C数组,而std::vector使用堆来存储元件,这允许更大的灵活性但需要付出代价.请参阅我的这个答案,以便在std::array和之间进行更详细的比较std::vector.