我正在编写一个具有固定容量的自定义循环缓冲区实现(通过调用构造函数在运行时修复,没有调整大小方法)并希望它与STL兼容。 我的目标是让它成为Random Access Container。另外我希望它具有Back Insertion Sequence的特定接口,但不是一个序列(没有调整大小并在任意位置插入/擦除,......)。所以它只是一个扩展的随机访问容器。 在阅读了一些关于 max_size()和 size()的问题后,我仍然有点困惑。
我目前的想法:
size():缓冲区中包含的元素数量
max_size():缓冲区的容量(它可以容纳的最大元素数)
这是否正确(符合标准/ STL)?或者我必须像(std::)数组一样处理它(size =)== max_size()?
答案 0 :(得分:4)
标准很清楚C ++ 11中表{96}的max_size()
的含义:
distance(begin(), end())
表示最大容器
如果像std::array
一样,大小是容器类型的属性(例如由模板参数指定),那么它应该与size()
相同。如果您可以实例化具有各种大小的相同类型,那么它应该是允许的最大大小。
我会按照标准容器的示例,并使用capacity()
函数告诉您容量。
答案 1 :(得分:3)
max_size
与容器类型的特定实例无关。它是类型可以处理的最大大小,根据任何实现细节限制它(如果没有别的话,size_type
的最大值)。
vector
可以保留当前未使用的空间,因此它具有capacity()
功能。但这不是任何容器概念的一部分,因为其他容器(deque
,list
)不保留空间。