LINKED_LIST 从 0 而不是 1 开始索引,可能吗?

LINKED_LIST indexing from 0, not 1, possible?

在 eiffel 中,索引通常从 1 开始,而不是 0。

我有以下两个属性:

arr: ARRAY[A]

link: LINKED_LIST[B]

对于数组,我可以特意让它的索引从0开始,如下:

arr.force (value, arr.count)

这样 arr[0] 就可以读取了。

然而,我做了类似的事情LINKED_LIST:

link.put_i_th (value, link.count)

然而,这违反了先决条件。

有没有办法让 LINKED_LIST 从 0 开始索引,而不是从 1 开始?这样 link[0] 就可以访问了吗?

如果可能的话,我需要一个例子。

LINKED_LIST(以及更一般的 LIST)中 put_i_th 的前提条件 valid_key 是使用函数 valid_index 指定的。后者的行为可以从它的后置条件 Result = (i >= 1 and i <= count) 推导出来。它指出有效索引大于零。

容器的边界也可用作查询 lowerupper。对于 LISTlower 的值是常数 1

根据上面的观察,LIST(和 LINKED_LIST)不能在索引 0(或以下)处包含元素。

此外,与直接控制结构大小的 ARRAY 不同,LIST 的元素是一个接一个添加的。这就是为什么 LIST 中的 force 没有索引并且像 extend 一样在结构的末尾添加一个新元素。

虽然 ARRAY 允许从 0(或任何其他整数值)进行索引,但使用 1 以外的较低索引被认为是一种不好的做法,因为大多数容器都有 lower = 1。只有在代码可以从不同于 1 的索引开始的极少数情况下,偏离标准约定才有意义。