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,

Из приведенных выше замечаний следует, что LISTLINKED_LIST) не может иметь элементы в индексе 0 (или ниже).

Кроме того, в отличие от ARRAYгде размер структуры контролируется напрямую, элементы к LIST добавляются по одному. Вот почему force в LIST не имеет индекса и работает как extend это добавляет новый элемент в конец структуры.

Хотя ARRAY позволяет индексировать из 0 (или любое другое целочисленное значение), считается плохой практикой использовать более низкий индекс, чем 1 потому что большинство контейнеров имеют lower = 1, Только в редких случаях, когда код может извлечь выгоду из индексов, начинающихся с чего-то отличного от 1Возможно, имеет смысл отклониться от стандартного соглашения.

Другие вопросы по тегам