Обновить

Комментарии 9

Автор, в Го слайс это 3 (три) значения: len(), cap() и unsafe pointer. Маленький слайс или большой .. это ровно структура зи трех элементов.

Обход правильно можно делать обратным перебором индекса. А вот то, что Вы создали НОВЫЙ слайс - это ровно ваша проблема. slice[n-i], slaci[i] = slice[i],slice[n-i] переставляет элементы без создания нового слайса.

Впрочем, всё остальное ровно в том же духе.

Автор в курсе, что такое срез :) Менять in-place нельзя, Backward не должна менять исходные данные. Поэтому если создавать новый срез, то это make() на N элементов, и O(n) памяти — как в первом примере. Все прочие примеры уже O(1).

Ну раз низзя, не настаиваю. )))

А если итератор беспрерывный как он будет там с обратного порядка делать?

Если вы имели в виде «бесконечный», то Backward как раз производит очень даже конечный итератор — ведь он обходит срез, а тот имеет фиксированную длину (на момент начала обхода).

Вы про постоянно растущий слайс?

А если да - то вообще возможен ли для него обратный итератор?

Можете объяснить, зачем в Seq2 дженерик индекса, если он всегда int?

Чтобы его можно использовать для обхода карты, например — где ключ не обязательно int.

У вас в сигнатуре Backward он принудительно указан как int, я не понимаю.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации