Вопрос по итераторам
От: Sm0ke Россия ksi
Дата: 26.12.22 16:47
Оценка:
1)
Как считаете нужно ли хранить sentinel отдельно от итератора?
Или можно просто в самом итераторе добавить метод bool is_end() ?

Думал этот вопрос задать в раздел "философия программирования", но решил сюда.

Предположим вначале мы взяли итератор, который в себе хранит ещё и sentinel. Потом после некоторых действий мы получаем sentinel, который будет отличаться от начального.
Если рассмотреть случай стандартного вектора, то после allocator::realloc сентинел отличается. Но и начальный итератор уже инвалидируется.

Просто нужен ли тогда вообще sentinel отдельно?

2)
Бывают ли случаи, когда вы сравниваете два итератора, которые не sentinel?
Тут наверно да, если к примеру вы нашли итератор в середине контейнера, и нужно до него дойти от другого итератора.

Вот не задача если обход происходит между двумя итераторами из разных контейнеров. Infinite loop или UB после очередного инкремента и дереференса.
Просится вывод, что перед обходом по паре итераторов следует проверять, чтобы они были одного поля ягода. Но когда при обходе даётся range, видимо можно доверять.

Нужен ли нам range, если можно в сам итератор добавить метод bool set_end() ? Ясен перец хорошо бы в нём проверить чтобы был match по контейнеру.

C++ такой себе unsafe, и я спрашиваю про любые языки программирования в принципе. С точки зрения удобного использования при написании программы.

3)
Нужен ли нам unsafe в динамическом языке аля некий скрипт? А при статических типах?
Отредактировано 26.12.2022 16:50 Sm0ke . Предыдущая версия .
размышления
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.