如果std::list
是一个链接列表,那么为什么您可以拥有多少元素?每个元素都是指向新节点的链接,并且对可以指定的指针数量没有限制。
答案 0 :(得分:6)
如果
std::list
是一个链接列表,那么为什么您可以拥有多少元素?
因为max_size()
函数是所有标准容器的必需条件。
每个元素都是指向新节点的链接,并且您可以拥有多少指针没有限制。
是的:大小必须由size_type
表示,因此限制是该类型的最大值。可能没有理由让它低于那个。
答案 1 :(得分:3)
你可以拥有多少指针没有限制
根据指针的大小,可能有多少个不同的指针值存在限制。例如,如果指针在特定实现中占用64位,则max_size()
可以安全地返回2 64 -1。实际上它可能比这更小,因为每个链表节点将大于1个字节。
答案 2 :(得分:1)
简单的答案是因为标准这样说:
23.2.1容器的要求Table 96 — Container requirements
p。 747为 N4296 :
a.max_size()
;size_type
;distance(begin(),end())
表示最大容器
这很可能来自c ++算法与容器分离的事实。算法是作为模板编写的,因此它们基本上是鸭子类型代码,他们希望实现一些契约(即提供一些API)。有针对所有容器编写的算法,因此他们期望作为容器传递的任何内容都可以实现完整的API,即使有时特定的方法没有太多理论意义,也必须实现它。
那就是说,技术上无论如何都有一个上限,所以在这种情况下使用它是个好主意。有趣的是,几乎不可能达到你从std::list::max_size()
获得的极限(即你会运行OOM),但却是理论上的无穷大。