Size: a a a

2020 March 09

AT

Anatoly Tomilov in pro.cxx
Strict total ordering не будет работать. Итераторы на один элемент могут быть больше/меньше
источник

AT

Anatoly Tomilov in pro.cxx
Flower Surgeon
не в целом, точно
Не отвечай мне пожалуйста ничего
источник

FS

Flower Surgeon in pro.cxx
Anatoly Tomilov
Не отвечай мне пожалуйста ничего
пффф, вы не император римский чтобы вам уделять столько внимания
источник

CD

Constantine Drozdov in pro.cxx
Anatoly Tomilov
Strict total ordering не будет работать. Итераторы на один элемент могут быть больше/меньше
А где вообще требование order у итераторов?
источник

AT

Anatoly Tomilov in pro.cxx
Constantine Drozdov
А где вообще требование order у итераторов?
источник

AT

Anatoly Tomilov in pro.cxx
Anatoly Tomilov
Можно в четверти диапазона int64_t от нуля держать итераторы начала и конца.
operator - для итераторов "из разных концов" должен кидать исключение
источник

CD

Constantine Drozdov in pro.cxx
А, ну надо категорию распиливать, total order итераторов никому не нужен
источник

AT

Anatoly Tomilov in pro.cxx
Алгоритмам над контейнерами итераторов нужен может быть
источник

FS

Flower Surgeon in pro.cxx
Скромно возражу, что изначальный вопрос был про кольцевой буфер.
источник

AT

Anatoly Tomilov in pro.cxx
Flower Surgeon
Скромно возражу, что изначальный вопрос был про кольцевой буфер.
🤫
источник

AT

Anatoly Tomilov in pro.cxx
Anatoly Tomilov
Strict total ordering не будет работать. Итераторы на один элемент могут быть больше/меньше
Хотя если не передавать итераторы в алгортм, отличающиеся более чем на размер контейнера, то нет проблемы, но тогда не обойти весь контейнер через использование past the end итератора диапазона
источник

FS

Flower Surgeon in pro.cxx
я удержусь от колкости
источник

NP

Nikita Provotorov in pro.cxx
Яснее не стало
Давайте посмотрим на конкретный пример: две разные имплементации std::advance (stdimpl1 и stdimpl2), новая введенная категория итераторов (my_new_iterators_tag).

Пожалуйста, приведите пример того, как здесь помогут ниблоиды?

wandbox: https://wandbox.org/permlink/28HVqZjIzWRFietw
источник

DS

Dmitry Sokolov in pro.cxx
Anatoly Tomilov
Strict total ordering не будет работать. Итераторы на один элемент могут быть больше/меньше
Кстати с учётом 2 complement переполнения можно ордеринг сделать по знаку разницы, положительная, отрицательная, нулевая.
источник

m

magras in pro.cxx
Dmitry Sokolov
Кстати с учётом 2 complement переполнения можно ордеринг сделать по знаку разницы, положительная, отрицательная, нулевая.
Это можно сделать и на беззнаковых. Просто все что больше max()/2 считать отрицательным. Я в свое время писал такую обертку над беззнаковыми типами как раз чтобы использовать в чем-то вроде кольцевого буфера.
источник

m

magras in pro.cxx
Плохо написал. Это работало примерно так: индексы были беззнковыми, но их разность я конвертировал в знаковое число. В принципе можно поставить просто static_cast, но можно сделать честную конвертацию. Компилятор вполне способен понять, что ничего не изменится и оставит nop.
источник

DS

Dmitry Sokolov in pro.cxx
magras
Это можно сделать и на беззнаковых. Просто все что больше max()/2 считать отрицательным. Я в свое время писал такую обертку над беззнаковыми типами как раз чтобы использовать в чем-то вроде кольцевого буфера.
Так я про unsigned и говорю, например uint8, begin=255, end=1, b-e=254, e-b=2.
источник

DS

Dmitry Sokolov in pro.cxx
magras
Это можно сделать и на беззнаковых. Просто все что больше max()/2 считать отрицательным. Я в свое время писал такую обертку над беззнаковыми типами как раз чтобы использовать в чем-то вроде кольцевого буфера.
С разницей всё и так хорошо, а больше тот, до которого... меньше разница :)
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
С разницей всё и так хорошо, а больше тот, до которого... меньше разница :)
Ну если у тебя зазор в половину диапазона есть, можно так
источник

m

magras in pro.cxx
Dmitry Sokolov
С разницей всё и так хорошо, а больше тот, до которого... меньше разница :)
У меня кода использующего такие индексы было сильно больше чем просто кольцевой буфер и было удобнее иметь знаковую разницу. Для кольцевого буфера, наверное, это действительно не нужно.
источник