为什么std :: list的最大大小?

时间:2014-12-16 16:06:32

标签: c++

如果std::list是一个链接列表,那么为什么您可以拥有多少元素?每个元素都是指向新节点的链接,并且对可以指定的指针数量没有限制。

3 个答案:

答案 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),但却是理论上的无穷大。