2

我正在编写一个具有固定容量的自定义循环缓冲区实现(在运行时通过调用构造函数来修复,没有调整大小的方法)并希望它与 STL 兼容。我的目标是使其成为Random Access Container。此外,我希望它具有Back Insertion Sequence的特定接口,但不是序列(没有在任意位置调整大小和插入/擦除,...)。所以它只是一个扩展的随机访问容器。在阅读了一些关于max_size()size()的问题后,我仍然有点困惑。

我目前的想法: size():缓冲区中包含的元素数
max_size():缓冲区的容量(它可以容纳的最大元素数)

这是正确的(符合标准/ STL)?还是我必须像 (std::)array 和 size() == max_size() 一样处理它?

4

2 回答 2

4

max_size()该标准对C++11 表 96 中的含义非常清楚:

distance(begin(), end())对于尽可能大的容器

如果像 一样std::array,大小是容器类型的属性(例如,由模板参数指定),那么它应该与 相同size()。如果您可以实例化具有不同大小的相同类型,那么它应该是允许的最大大小。

我将遵循标准容器的示例,并具有capacity()告诉您容量的功能。

于 2012-12-14T12:00:02.357 回答
3

max_size与容器类型的特定实例无关。size_type它是类型可以处理的最大大小,根据任何实现细节限制它(如果没有其他的最大值)。

vector可以保留当前未使用的空间,因此它具有capacity()功能。不过,这不是任何容器概念的一部分,因为其他容器 ( deque, list) 不保留空间。

于 2012-12-14T11:58:53.450 回答