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

时间:2017-10-31 23:28:55

标签: eiffel

在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?以便链接[0]可以访问?

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

1 个答案:

答案 0 :(得分:2)

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

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

从上面的观察结果可以看出,LIST(和LINKED_LIST)不能在索引0(或以下)处拥有元素。

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

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