LINKED_LIST индексирование от 0, а не от 1, возможно?
В eiffel индексирование обычно начинается с 1, а не с 0.
У меня есть следующие 2 атрибута:
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 ответ
Предварительное условие valid_key
из put_i_th
в LINKED_LIST
(а также в более общем LIST
) указывается с помощью функции valid_index
, Поведение последнего может быть выведено из его постусловия Result = (i >= 1 and i <= count)
, В нем говорится, что действительный индекс больше нуля.
Границы контейнеров также доступны в виде запросов lower
а также upper
, Для LIST
значение lower
постоянная 1
,
Из приведенных выше замечаний следует, что LIST
(и LINKED_LIST
) не может иметь элементы в индексе 0
(или ниже).
Кроме того, в отличие от ARRAY
где размер структуры контролируется напрямую, элементы к LIST
добавляются по одному. Вот почему force
в LIST
не имеет индекса и работает как extend
это добавляет новый элемент в конец структуры.
Хотя ARRAY
позволяет индексировать из 0
(или любое другое целочисленное значение), считается плохой практикой использовать более низкий индекс, чем 1
потому что большинство контейнеров имеют lower = 1
, Только в редких случаях, когда код может извлечь выгоду из индексов, начинающихся с чего-то отличного от 1
Возможно, имеет смысл отклониться от стандартного соглашения.