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)
推导出来。它指出有效索引大于零。
容器的边界也可用作查询 lower
和 upper
。对于 LIST
,lower
的值是常数 1
。
根据上面的观察,LIST
(和 LINKED_LIST
)不能在索引 0
(或以下)处包含元素。
此外,与直接控制结构大小的 ARRAY
不同,LIST
的元素是一个接一个添加的。这就是为什么 LIST
中的 force
没有索引并且像 extend
一样在结构的末尾添加一个新元素。
虽然 ARRAY
允许从 0
(或任何其他整数值)进行索引,但使用 1
以外的较低索引被认为是一种不好的做法,因为大多数容器都有 lower = 1
。只有在代码可以从不同于 1
的索引开始的极少数情况下,偏离标准约定才有意义。
在 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)
推导出来。它指出有效索引大于零。
容器的边界也可用作查询 lower
和 upper
。对于 LIST
,lower
的值是常数 1
。
根据上面的观察,LIST
(和 LINKED_LIST
)不能在索引 0
(或以下)处包含元素。
此外,与直接控制结构大小的 ARRAY
不同,LIST
的元素是一个接一个添加的。这就是为什么 LIST
中的 force
没有索引并且像 extend
一样在结构的末尾添加一个新元素。
虽然 ARRAY
允许从 0
(或任何其他整数值)进行索引,但使用 1
以外的较低索引被认为是一种不好的做法,因为大多数容器都有 lower = 1
。只有在代码可以从不同于 1
的索引开始的极少数情况下,偏离标准约定才有意义。